Ferramentas

Selasa, 13 Oktober 2009

ALGORITMA DAN PEMOGRAMAN


  • Pengantar Algoritma dan Pemrograman

    Ditinjau dari asal usul katanya kata Algoritma sendiri mempunyai sejarah yang aneh. Orang hanya menemukan kata Algorism yang berarti proses menghitung dengan angka arab. Anda dikatakan Algorist jika anda menghitung menggunakan Angka Arab. Para ahli bahasa berusaha menemukan asal kata ini namun hasilnya kurang memuaskan. Akhirnya para ahli sejarah matematika menemukan asal kata tersebut yang berasal dari nama penulis buku arab yang terkenal yaitu Abu Ja’far Muhammad Ibnu Musa Al Khuwarizmi. Al- Khuwarizmi dibaca orang barat menjadi Algorism. Al-Khuwarizmi menulis buku yang berjudul Kitab Al Jabar Wal-Muqabala yang artinya “Buku pemugaran dan pengurangan” (The book of restoration and reduction). Dari judul buku itu kita juga memperoleh akar kata “Aljabar” (Algebra). Perubahan kata dari Algorism menjadi Algorithm muncul karena kata Algorism sering dikelirukan dengan Arithmetic, sehingga akhiran –sm berubah menjadi –thm. Karena perhitungan dengan angka Arab sudah menjadi hal yang biasa. Maka lambat laun kata Algorithm berangsur-angsur dipakai sebagai metode perhitungan (komputasi) secara umum, sehingga kehilangan makna kata aslinya. Dalam Bahasa Indonesia, kata Algorithm diserap menjadi Algoritma.

    Definisi Program / Pemrograman
    Adalah kumpulan instruksi – instruksi tersendiri yang biasanya disebut source code yang dibuat oleh programmer ( pembuat programm ).

    Paradigma Pemrograman
    1. Pemrograman Prosedural
    Berdasarkan urutan-urutan, sekuensial
    Program adalah suatu rangkaian prosedur untuk memanipulasi data. Prosedur
    merupakan kumpulan instruksi yang dikerjakan secara berurutan.
    Harus mengingat prosedur mana yang sudah dipanggil dan apa yang sudah
    diubah.

    2. Pemrograman Fungsional
    Berdasarkan teori fungsi matematika
    Fungsi merupakan dasar utama program.
    3. Pemrograman Terstruktur
    Secara berurutan dan terstrukrtur.
    Program dapat dibagai-bagi menjadi prosedur dan fungsi.
    Contoh: PASCAL dan C
    4. Pemrograman Modular
    Pemrograman ini membentuk banyak modul.
    Modul merupakan kumpulan dari prosedur dan fungsi yang berdiri sendiri
    Sebuah program dapat merupakan kumpulan modul-modul.
    Contoh: MODULA-2 atau ADA
    5. Pemrograman Berorientasi Obyek
    Pemrograman berdasarkan prinsip obyek, dimana obyek memiliki
    data/variabel/property dan method/event/prosedur yang dapat dimanipulasi
    Contoh: C++, Object Pascal, dan Java.
    6. Pemrograman Berorientasi Fungsi
    Pemrograman ini berfokus pada suatu fungsi tertentu saja. Sangat tergantung
    pada tujuan pembuatan bahasa pemrograman ini.
    Contoh: SQL (Structured Query Language), HTML, XML dan lain-lain.
    7. Pemrograman Deklaratif
    Pemrograman ini mendeskripsikan suatu masalah dengan pernyataan daripada
    memecahkan masalah dengan implementasi algoritma.
    Contoh: PROLOG

    Mekanisme Pelaksanan Algoritma Oleh Pemroses
    Komputer hanyalah salah satu pemroses. Agar dapat dilaksanakan oleh komputer,
    algoritma hasrus ditulis dalam notasi bahasa pemrograman sehingga dinamakan program.
    Jadi program adalah prwujudan atau implementasi teknis Algoritma yang ditulis dalam bahasa pemrogaman tertentu sehingga dapat dilaksanakan oleh komputer.
    Belajar Memprogram Dan Belajar Bahasa Pemrograman
    Belajar memprogram tidak sama dengan belajar bahasa pemrograman. Belajar memprogram adalah belajar tentang metodologi pemecahan masalah, kemudian menuangkannya dalam suatu notasi tertentu yang mudah dibaca dan dipahami. Sedangakan belajar bahasa pemrograman berarti belajar memakai suatu bahasa aturan-aturan tata bahasanya, instruksi-instruksinya, tata cara pengoperasian compiler-nya, dan memanfaatkan instruksi-instruksi tersebut untuk membuat program yang ditulis hanya dalam bahasa itu sajaSampai saat ini terdapat puluhan bahasa pemrogram. Yang dapat dibedakan berdasarkan tujuan dan fungsinya.
    Diantaranya adalah :


    Progamming
    Language Paradigm


    Declarative

    Imperative
    Prosedural
    C, Pascal,
    Fortran,
    Basic

    ObjOriented
    Ada, Object
    Pascal, C++,
    Java,
    Smalltalk,
    Eiffel

    Parallel
    Processing :
    Ada, Pascal S,
    Occam, CLinda

    Logic :
    PROLOG
    Functional :
    LISP, APL, Schame

    LISP, APL,
    SCHEME LISP, APL,
    SCHEME
    Database :
    SQL
    SQL


    1. Belajar Memprogram
    Belajar memprogram ≠ belajar bahasa pemrograman
    Belajar memprogram : belahar tentang strategi pemecahan masalah, metodologi, dan sistematika pemecahan masalah kemudian menuliskannya dalam notasi yang disepakati bersama.
    Belajar memprogram : bersifat pemehaman persoalan, analisis dan sistesis.
    Belajar memprogram, ririk berat : design program

    2. Belajar Bahasa Pemrograman
    Belajar bahasa pemrograman : belajar memakai suatu bahasa pemrograman, aturan sintaks, tatacara untuk memanfaatkan instruksi yang spesifik untuk setiap bahasa
    Belajar bahasa pemrograman, titik berat : coder
    Produk yang dihasilkan pemrogram :
    Program dengan rancangan yang baik (metodologis, sistematis )
    Dapat dieksekusi oleh mesin
    Berfungsi dengan benar
    Sanggup melayani segala kemungkinan masukan
    Disertai dokumentasi
    Belajar memprogram, titik berat : desinger program

    Pemrograman Prosedural
    Algoritma berisi urutan langkah-langkah penyelesaian masalah. Ini berarti Algoritma adalah proses yang procedural.
    Definisi Prosedural menurut Kamus Besar Bahasa Indonesia :
    1. Tahap-tahap kegiatan untuk menyelesaikan suatu aktivitas.
    2. Metode langkah demi langkah secara eksak dalam memecahkan suatu masalah.
    Pada pemrograman procedural, program dibedakan antara bagian data dengan bagianinstruksi. Bagian instruksi terdiri atas runtutan (sequence) instruksi yang dilaksanakan satu per satu secara berurutan oleh pemroses. Alur pelaksanaan instruksi dapat berubah karena adanya pencabangan kondisional. Data yang disimpan di dalam memori dimanipulasi oleh instrusi secara beruntun atau procedural. Paradigma pemrograman seperti ini dinamakan pemrograman procedural.
    Bahasa-bahasa tingkat tinggi seperti Cobol, Basic, Pascal, Fortran dan C mendukung kegiatan pemrograman procedural, karena itu mereka dinamakan juga bahasa procedural. Selain paradigma pemrograman procedural, ada lagi paradigma yang lain yaitu pemrograman berorientasi objek (Object Oriented Programming). Paradigma pemrograman ini merupakan trend baru dan sangat populr akhir-akhir ini.
    Paradigma pemrograman yang lain adalah pemrograman fungsional, pemrogramn
    deklaratif dan pemrograman konkuren. Pada kesempatan ini penulis hanya menyajikan paradigma pemrograman procedural saja




    Langkah-langkah dalam pemrograman komputer

    1. Mendefinisikan masalah
    Ini merupakan langkah pertama yang sering dilupakan orang. Menurut hukum Murphy (oleh Henry Ledgard): “Semakin cepat menulis program, akan semakin lama kita dapat menyelesaikannya”.
    Hal tersebut berlaku untuk permasalahan yang kompleks. Tentukan masalahnya, apa saja yang harus dipecahkan dengan menggunakan komputer, dan apa inputan serta outputnya.
    2. Menemukan solusi
    Setelah masalah didefinisikan, maka langkah berikutnya adalah menentukan solusi. Jika masalah terlalu kompleks, maka ada baiknya masalah tersebut dipecah menjadi modul-modul kecil agar lebih mudah diselesaikan.
    Contohnya masalah invers matriks, maka kita dapat membagi menjadi beberapa
    Modul
    Meminta masukkan berupa matriks bujur sangkar
    Mencari invers matrik
    Menampilkan hasil kepada pengguna
    Dengan penggunaan modul tersebut program utama akan menjadi lebih singkat dan mudah dilihat.

    3. Memilih algoritma
    Pilihlah algoritma yang benar-benar sesuai dan efisien untuk permasalahan tersebut
    4. Menulis program
    Pilihlah bahasa yang mudah dipelajari, mudah digunakan, dan lebih baik lagi jik
    sudah dikuasai, memiliki tingkat kompatibilitas tinggi dengan perangkat keras dan
    platform lainnya.
    5. Menguji program
    Setelah program jadi, silahkan uji program tersebut dengan segala macam
    kemungkinan yang ada, termasuk error-handlingnya sehingga program tersebut akan benar-benar handal dan layak digunakan.
    6. Menulis dokumentasi
    Menulis dokumentasi sangat penting agar pada suatu saat jika kita akan melakukan perubahan atau membaca source code yang sudah kita tulis dapat kita ingat-ingat lagi dan kita akan mudah membacanya. Caranya adalah dengan menuliskan komentarkomentar kecil tentang apa maksud kode tersebut, untuk apa, variabel apa saja yang digunakan, untuk apa, dan parameter-parameter yang ada pada suatu prosedur dan
    fungsi.
    7. Merawat program
    Program yang sudah jadi perlu dirawat untuk mencegah munculnya bug yang
    sebelumnya tidak terdeteksi. Atau mungkin juga pengguna membutuhkan fasilitas
    baru yang dulu tidak ada.




















    Algoritma

    Pendahuluan
    Algoritma memegang peranan penting dalam bidang pemrograman. Sebegitu pentingnya suatu algoritma, sehingga perlu dipahami konsep dasar algoritma. Apalagi untuk seorang programer, tentu diperlukan suatu algoritma sehingga dapat membuat program yang lebih efektif dan efisien. Bagi kebanyakan orang, algoritma sangat membantu dalam memahami konsep logika pemrograman. Algoritma adalah kumpulan instruksi yang dibuat secara jelas untuk menunjukan langkah-langkah penyelesaian suatu masalah. Pada umumnya algoritma kurang lebih sama dengan suatu prosedur yang sering dilakukan setiap hari, misalnya prosedur untuk mengganti ban bocor/pecah, prosedur pemakaian telepon umum, prosedur membuat kue dan lain-lain.
    Dalam bidang komputer, misalnya EDP (Elektronik Data Processing) atau MIS
    (Management Information System), algoritma sering dimanfaatkan untuk menyelesaikan
    suatu masalah atau untuk proses pengambilan keputusan. Seorang sistem analisis (analisist system) tentunya menggunakan algoritma untuk merancang suatu sistem. Bagi seorang programer, algoritma digunakan untuk membuat modul-modul program. Guna memahami suatu algoritma, harus dimiliki pengetahuan dasar matematika karena pada dasarnya algoritma lahir dari konsep logika matematika. Disini yang perlu dilatih adalah kemampuan logikanya agar benar-benar bisa menyusun langkah-langkah penyelesaian masalah dengan baik. Dalam buku ajar ini, disajikan konsep dasar dan analisis algoritma. Pada bagian konsep dasar dibahas komponen utama, desain, dan contoh pembuatan. Selanjutnya, untuk mendapatkan algoritma yang efisien serta mendapatkan rumusan matematika sebagai ukuran kerumitan (kompleksitas) maka dibahas analisis algoritma dengan menggunakan notasi O (big O).

    Algoritma Merupakan Jantung Ilmu Informatika
    Algoritma adalah jantung ilmu komputer atau informatika. Banyak cabang ilmu komputeryang diacu dalam terminologi algoritma. Namun, jangan beranggapan algoritma selalu identik dengan ilmu komputer saja. Dalam kehidupan sehari-haripun banyak terdapat proses yang dinyatakan dalam suatu algoritma. Cara-cara membuat kue atau masakan yang dinyatakan dalam suatu resep juga dapat disebut sebagai algoritma. Pada setiap resep selalu ada urutan langkah-lankah membuat masakan. Bila langkah-langkahnya tidak logis, tidak dapat dihasilkan masakan yang diinginkan. Ibu-ibu yang mencoba suatu resep masakan akan membaca satu per satu langkah-langkah pembuatannya lalu ia mengerjakan proses sesuai yang ia baca. Secara umum, pihak (benda) yang mengerjakan proses disebut pemroses (processor). Pemroses tersebut dapat berupa manusia, komputer, robot atau alatalat elektronik lainnya. Pemroses melakukan suatu proses dengan melaksanakan atau “mengeksekusi” algoritma yang menjabarkan proses tersebut. Melaksanakan Algoritma berarti mengerjakan langkah-langkah di dalam Algoritma tersebut. Pemroses mengerjakan proses sesuai dengan algoritma yang diberikan kepadanya. Juru masak membuat kue berdasarkan resep yang diberikan kepadanya, pianis memainkan lagu berdasarkan papan not balok. Karena itu suatu Algoritma harus dinyatakan dalam bentuk yang dapat dimengerti oleh pemroses. Jadi suatu pemroses harus :
    1. Mengerti setiap langkah dalam Algoritma
    2. Mengerjakan operasi yang bersesuaian dengan langkah tersebut.

    Definisi Algoritma
    Algoritma adalah urutan langkah logis tertentu untuk memecahkan suatu masalah.
    Yang ditekankan adalah urutan langkah logis, yang berarti algoritma harus mengikuti suatu urutan tertentu, tidak boleh melompat-lompat. (Dari Microsoft Press Computer and Internet Dictionaary 1997, 1998)
    Alur pemikiran dalam menyelesaikan suatu pekerjaan yang dituangkan secara tertulis. Yang ditekankan pertama adalah alur pikiran, sehingga algoritma seseorang dapat juga berbeda dari algoritma orang lain. Sedangkan penekanan kedua adalah tertulis, yang artinya dapat berupa kalimat, gambar, atau tabel tertentu. (Dari Algoritma dan Struktur Data dengan C, C++, dan Java oleh Moh Sjukani hal 1)



    Konsep Dasar Algoritma
    Algoritma adalah kumpulan instruksi/perintah yang dibuat secara jelas dan sistematis berdasarkan urutan yang logis (logika) untuk penyelesaian suatu masalah. French,C.S. (1984) menyatakan sejumlah konsep yang mempunyai relevansi dengan masalah rancangan program yaitu kemampuan komputer, kesulitan dan ketepatan. Penerapan dari konsep tersebut biasanya digunakan dalam rancangan algoritma. Dalam merancang sebuah algoritma, Fletcher (1991) memberikan beberapa cara atau metode yaitu kumpulan perintah, ekspresi, tabel instruksi, program komputer, kode semu dan flow chart, sedangkan Knuth (1973) menyarankan algoritma fundamental. Untuk keperluan
    matematika dan program komputer metode yang sering digunakan yaitu :
    1. Diagram Alir (Flow Chart)
    2. Kode Semu (Pseudo Code)
    3. Algoritma Fundamental
    Knuth (1973) menyatakan 5 komponen utama dalam algoritma yaitu finiteness,
    definiteness, input, output dan effectiveness. Sehingga dalam merancang sebuah algoritma ada 3 (tiga) komponen yang harus ada yaitu:
    1. Komponen masukan (input)
    Komponen ini biasanya terdiri dari pemilihan variable, jenis variable, tipe variable,
    konstanta dan parameter (dalam fungsi).
    2. Komponen keluaran (output)
    Komponen ini merupakan tujuan dari perancangan algoritma dan program.
    Permasalahan yang diselesaikan dalam algoritma dan program harus ditampilkan dalam
    komponen keluaran. Karakteristik keluaran yang baik adalah benar (menjawab)
    permasalahan dan tampilan yang ramah (Frendly).
    3. Komponen proses (processing)
    Komponen ini merupakan bagian utama dan terpenting dalam merancang sebuah
    algoritma. Dalam bagian ini terdapat logika masalah, logika algoritma (sintaksis dan
    semantik), rumusan, metode (rekursi, perbandingan, penggabungan, pengurangan dan
    lain-lain).



    Konsep Logika Matematika
    Format Algoritma
    Pseudo Code
    FlowChart

    Fundamental
    Knuth, 1973 Knuth, 1973






    Jenis Proses Algoritma
    1. Sequence Process: instruksi dikerjakan secara sekuensial, berurutan.
    2. Selection Process: instruksi dikerjakan jika memenuhi kriteria tertentu
    3. Iteration Process: instruksi dikerjakan selama memenuhi suatu kondisi tertentu.
    4. Concurrent Process: beberapa instruksi dikerjakan secara bersama.

    Analisis Algoritma dan Kompleksitas Algoritma
    Seorang programer atau sistem analisis paling tidak harus memiliki dasar untuk
    menganalisis algoritma. Analisis algoritma sangat membantu di dalam meningkatkan
    efisiensi program. Kecanggihan suatu program bukan dilihat dari tampilan program, tetapi
    berdasarkan efisiensi algoritma yang terdapat didalam program tersebut.
    Pembuatan program komputer tidak terlepas dari algoritma, apalagi program yang
    dibuat sangat kompleks. Program dapat dibuat dengan mengabaikan algoritma, tetapi
    jangan heran bila seandainya ada orang lain yang membuat program seperti program anda
    tersebut memiliki akses yang lebih cepat dan memakai memori yang sangat sedikit.
    Analisis algoritma adalah bahasan utama dalam ilmu komputer. Dalam menguji
    suatu algoritma, dibutuhkan beberapa kriteria untuk mengukur efisiensi algoritma.
    Terdapat dua tipe analisis algoritma, yaitu :
    1. Memeriksa kebenaran algoritma
    Dapat dilakukan dengan cara perurutan, memeriksa bentuk logika, implementasi
    algoritma, pengujian dengan data dan menggunakan cara matematika untuk
    membuktikan kebenaran.
    2. Penyederhanaan Algoritma
    Membagi algoritma menjadi bentuk yang sederhana.

    Notasi Algoritma Independen Terhadap Bahasa Pemrograman Dan Mesin Komputer
    Notasi Algoritma dapat diterjemahkan ke dalam berbagai bahasa pemrograman. Analoginya sama dengan resep membuat kue. Sebuah resep dapat ditulis dalam bahasa apapun. Bahasa Jepang, Inggris, Perancis, Indonesia, dan lain sebagainya. Apapun bahasanya, kue yang dihasilkan tetap sama asalkan semua aturan pada resep diikuti. Mengapa demikian ? Karena setiap juru masak (sebagai pemroses) dapat melakukan operasi dasar yang sama, seperti mengocok telur, menimbang berat gula, dan lain sebagainya. Demikian juga halnya dengan komputer. Meskipun setiap komputer berbeda teknologinya, tetapi secara umum semua komputer dapat melakukan operasi-operasi dasar dalam pemrograman seperti operasi pembacaan data, operasi perbandingan, operasi aritmatika, dan sebagainya. Perkembangan teknologi komputer tidak mengubah operasi-operasi dasar itu, yang berubah hanyalah kecepatan, biaya, atau tingkat ketelitian. Pada sisi lain setiap program dalam bahasa tingkat tinggi selalu diterjemahkan kedalam bahasa mesin sebelum akhirnya dikerjakan oleh CPU. Setiap instruksi dalam bahasa mesin menyajikan operasi dasar yang sesuai, dan menghasilkan efek netto yang sama pada setiap komputer.


    Kriteria Algoritma Menurut Donald E. Knuth
    1. Input : algoritma dapat memiliki nol atau lebih inputan dari luar.
    2. Output : algoritma harus memiliki minimal satu buat output keluaran.
    3. Definiteness (pasti) : algoritma memiliki instruksi-instruksi yang jelas dan tidak ambigu
    4. Effectiveness (tepat dan efisien) : algoritma sebisa mungkin harus dapat dilaksanakan dan efektif.



    Mekanisme Pelaksanan Algoritma Oleh Pemroses
    Komputer hanyalah salah satu pemroses. Agar dapat dilaksanakan oleh komputer,
    algoritma hasrus ditulis dalam notasi bahasa pemrograman sehingga dinamakan program.
    Jadi program adalah prwujudan atau implementasi teknis Algoritma yang ditulis dalam bahasa pemrogaman tertentu sehingga dapat dilaksanakan oleh komputer.

    Jenis Proses Algoritma
    1. Sequence Process: instruksi dikerjakan secara sekuensial, berurutan.
    2. Selection Process: instruksi dikerjakan jika memenuhi kriteria tertentu
    3. Iteration Process: instruksi dikerjakan selama memenuhi suatu kondisi tertentu.
    4. Concurrent Process: beberapa instruksi dikerjakan secara bersama.

    Analisis Algoritma dan Kompleksitas Algoritma
    Seorang programer atau sistem analisis paling tidak harus memiliki dasar untuk menganalisis algoritma. Analisis algoritma sangat membantu di dalam meningkatkan efisiensi program. Kecanggihan suatu program bukan dilihat dari tampilan program, tetapi berdasarkan efisiensi algoritma yang terdapat didalam program tersebut. Pembuatan program komputer tidak terlepas dari algoritma, apalagi program yang dibuat sangat kompleks. Program dapat dibuat dengan mengabaikan algoritma, tetapi jangan heran bila seandainya ada orang lain yang membuat program seperti program anda tersebut memiliki akses yang lebih cepat dan memakai memori yang sangat sedikit. Analisis algoritma adalah bahasan utama dalam ilmu komputer. Dalam menguji suatu algoritma, dibutuhkan beberapa kriteria untuk mengukur efisiensi algoritma.Terdapat dua tipe analisis algoritma, yaitu :
    1. Memeriksa kebenaran algoritma
    Dapat dilakukan dengan cara perurutan, memeriksa bentuk logika, implementasi algoritma, pengujian dengan data dan menggunakan cara matematika untuk membuktikan kebenaran.
    2. Penyederhanaan Algoritma
    Membagi algoritma menjadi bentuk yang sederhana.
    Definisi Pseudo-code
    Kode atau tanda yang menyerupai (pseudo) atau merupakan pejelasan cara menyelesaikan suatu masalah. Pseudo-code sering digunakan oleh manusia untuk menuliskan algoritma.
    Problem: mencari bilangan terbesar dari dua bilangan yang diinputkan
    Contoh Pseudo-code:
    Masukkan bilangan pertama
    Masukkan bilangan kedua
    Jika bilangan pertama . bilangan kedua maka kerjakan langkah 4, jika tidak, kerjakan langkah 5
    Tampilkan bilangan pertama
    Tampilkan bilangan kedua

    Contoh Algoritma
    Masukkan bilangan pertama (a)
    Masukkan bilangan kedua (b)
    if a . b then kerjakan lankah 4
    Print a
    Print b
    Contoh Lain Algortima dan Pseudo-code:
    Pseudo-code Algoritma

    Pseudo-code
    Algoritma
    Nilai A ditambah dengan 5
    A ← A + 5
    Cetak nilai A bila lebih besar dari 10
    IF A > 10 THEN PRINT A
    Dari dua bilangan A dan B, cari
    bilangan yang terbesar
    IF A > B THEN PRINT A ELSE PRINT
    B


    SOAL ALGORITMA
    1. Buatlah algoritma untuk konversi suhu dari celcius menjadi reamur dan fahrenheit.
    Input : Suhu Celcius
    Proses : R=4/5*C dan F=9/5*C + 32
    Output : Suhu dalam reamur dan fahrenheit
    2. Buatlah algoritma untuk mencari sisi miring dari suatu segitiga siku-siku, jika diketahui panjang sisi yang membentuk sudut siku-siku.
    Input : a dan b yaitu panjang sisi sudut siku-siku
    Proses : c = a2 + b2
    Output : sisi miring (c)
    3. Buatlah algoritma untuk menentukan suatu bilangan genap atau ganjil
    Input : Suatu bulangan
    Proses :
    Output : genap / ganjil
    4. Buatlah algoritma untuk menghitung akar-akar persamaan kuadrat dengan rumus D = B2 – 4 * A * C
    Jika D < d =" 0" x1 =" X2" d =" -B"> 0 maka ada dua akar X1 = −B + D/ 2 * A dan X 2 = −B − D/ 2 * A


















    DAFTAR PUSTAKA

    www.google.com

0 komentar:

Posting Komentar

Twitter Delicious Facebook Digg Stumbleupon Favorites More