Avatar Clock

Tinggalkan komentar


Avatar Widget by Widgia

Bilangan English (bertingkat)

Tinggalkan komentar

st first 11th eleventh 21st twenty-first
2nd second 12th twelfth 22nd twenty-second
3rd third 13th thirteenth 23rd twenty-third
4th fourth 14th fourteenth 24th twenty-fourth
5th fifth 15th fifteenth 25th twenty-fifth
6th sixth 16th sixteenth 26th twenty-sixth
7th seventh 17th seventeenth 27th twenty-seventh
8th eighth 18th eighteenth 100th one hundredth
9th ninth 19th nineteenth 1,000th one thousandth
10th tenth 20th twentieth 1,000,000th one millionth

Bilangan English (biasa)

Tinggalkan komentar

1 one 11 eleven 21 twenty-one
2 two 12 twelve 22 twenty-two
3 three 13 thirteen 23 twenty-three
4 four 14 fourteen 24 twenty-four
5 five 15 fifteen 25 twenty-five
6 six 16 sixteen 26 twenty-six
7 seven 17 seventeen 27 twenty-seven
8 eight 18 eighteen 100 a/one hundred
9 nine 19 nineteen 1,000 a/one thousand
10 ten 20 twenty 1,000,000 a/one million

Radio Dangdut Online

Tinggalkan komentar

Musik adalah bunyi yang diterima oleh individu dan berbeda-beda berdasarkan sejarah, lokasi, budaya dan selera seseorang. Definisi sejati tentang musik juga bermacam-macam:

  • Bunyi/kesan terhadap sesuatu yang ditangkap oleh indera pendengar
  • Suatu karya seni dengan segenap unsur pokok dan pendukungnya.
  • Segala bunyi yang dihasilkan secara sengaja oleh seseorang atau kumpulan dan disajikan sebagai musik

Musik menurut Aristoteles musik mempunyai kemampuan mendamaikan hati yang gundah, mempunyai terapi rekreatif dan menumbuhkan jiwa patriotisme.

Selamat menikmati musik dangdut, Klik disini

Perangkat Keras Komputer

Tinggalkan komentar

Definisi

Perangkat keras komputer (hardware) adalah semua bagian fisik komputer, dan dibedakan dengan data yang berada di dalamnya atau yang beroperasi di dalamnya, dan dibedakan dengan perangkat lunak (software) yang menyediakan instruksi untuk perangkat keras dalam menyelesaikan tugasnya.

Batasan antara perangkat keras dan perangkat lunak akan sedikit buram kalau kita berbicara mengenai firmware, karena firmware ini adalah perangkat lunak yang “dibuat” ke dalam perangkat keras. Firmware ini merupakan wilayah dari bidang ilmu komputer dan teknik komputer, yang jarang dikenal oleh pengguna umum.

Komputer pada umumnya adalah komputer pribadi, (PC) dalam bentuk desktop atau menara kotak yang terdiri dari bagian berikut:

Sebagai tambahan, perangkat keras dapat memasukan komponen luar lainnya. Di bawah ini merupakan komponen standar atau yang umum digunakan.

Sumber ; http://id.wikipedia.org

Algoritma dan Pemrograman

Tinggalkan komentar

Pendahuluan

Dalam matematika, ilmu komputer, dan mata pelajaran terkait, algoritma merupakan metode yang efektif untuk memecahkan masalah dengan menggunakan urutan instruksi yang terbatas. Algoritma yang digunakan untuk perhitungan, pengolahan data, dan bidang lainnya. Setiap algoritma ini adalah daftar instruksi yang jelas untuk menyelesaikan tugas. Mulai dari keadaan awal, petunjuk menggambarkan bahwa hasil perhitungan melalui serangkaian yang jelas tentang negara berturut-turut, akhirnya mengakhiri dalam keadaan yang berakhir akhir. Transisi dari satu negara ke yang berikutnya tidak harus deterministik, beberapa algoritma, dikenal sebagai algoritma acak, menggabungkan keacakan.

Sebuah formalisasi sebagian konsep mulai dengan upaya untuk memecahkan Entscheidungsproblem (the “masalah keputusan”) yang diajukan oleh David Hilbert pada tahun 1928. formalizations selanjutnya telah dijadikan sebagai usaha untuk mendefinisikan “calculability efektif” atau “metode efektif”;  yang formalizations termasuk fungsi Gödel-Herbrand-Kleene rekursif tahun 1930, 1934 dan 1935, Alonzo Gereja lambda kalkulus 1936, Emil Post “Perumusan tahun 1936”, dan mesin Turing Alan Turing dari 1936 dan 1939.  Kata sifat yang “berkesinambungan” bila diterapkan untuk kata “algoritma” dapat berarti: Sebuah algoritma yang beroperasi pada data yang merepresentasikan kuantitas yang kontinu, meskipun data ini diwakili oleh pendekatan diskrit – algoritma tersebut dipelajari dalam analisis numerik, atau  An algoritma dalam bentuk persamaan diferensial yang dioperasikan terus menerus pada data, yang berjalan pada sebuah komputer analog.

Etimologi

Al-Khawarizmi, astronom muslim dan matematikawan Persia, menulis sebuah risalah dalam bahasa Arab di 825 AD, Perhitungan dengan Hindu-sistem angka Arab. (Lihat algorism). Ini diterjemahkan dari arabic ke dalam bahasa Latin pada abad ke-12 sebagai Algoritmi de numero Indorum (al-Daffa 1977), yang judulnya diduga akan dimaksudkan untuk berarti “Algoritmi pada angka dari” India, di mana “Algoritmi” adalah rendition penerjemah tentang nama penulis, tetapi orang kesalahpahaman judul Algoritmi diperlakukan sebagai jamak Latin dan ini menyebabkan kata “algoritma” (Latin algorismus) datang berarti “metode perhitungan”. Tanggal “mengganggu” kemungkinan besar disebabkan oleh serumpun palsu dengan ἀριθμός Yunani (arithmos) yang berarti “nomor”.

Mengapa diperlukan algoritma: definisi informal

Untuk presentasi rinci dari berbagai titik pandang sekitar definisi “algoritma” lihat penokohan Algoritma. Untuk contoh sederhana algoritma Selain ditentukan dengan cara yang rinci dijelaskan dalam penokohan Algoritma, lihat contoh Algoritma. Meskipun tidak ada yang berlaku umum definisi formal dari “algoritma,” definisi informal bisa menjadi “sebuah proses yang menjalankan beberapa urutan operasi.” Bagi beberapa orang, program hanya algoritma jika akhirnya berhenti. Bagi yang lain, program adalah hanya suatu algoritma jika berhenti sebelum beberapa langkah perhitungan tertentu.

Contoh prototipe dari algoritma adalah algoritma Euclid untuk menentukan pembagi umum maksimum dua bilangan bulat. Kita bisa memperoleh petunjuk untuk isu-isu yang terlibat dan informal makna kata dari kutipan berikut dari Boolos & Jeffrey (1974, 1999) (tebal ditambahkan): tidak ada manusia yang dapat menulis cukup cepat, atau cukup lama, atau cukup kecil † († “lebih kecil dan lebih kecil tanpa batas … Anda akan mencoba untuk menulis pada molekul, pada atom, pada elektron”) untuk mendaftarkan semua anggota dari ditetapkan enumerably tak terbatas dengan menuliskan nama mereka, satu demi satu, dalam notasi tertentu. Tetapi manusia dapat melakukan sesuatu sama berguna, dalam kasus tertentu tak terbatas set enumerably: Mereka dapat memberikan petunjuk yang jelas untuk menentukan anggota n set, untuk n. terbatas sewenang-wenang instruksi tersebut harus diberikan secara eksplisit, dalam bentuk di mana mereka dapat diikuti oleh sebuah mesin komputasi, atau oleh seorang manusia yang mampu melakukan hanya operasi yang sangat dasar pada simbol.

Istilah “” enumerably tak terbatas berarti “mungkin dpt dihitung menggunakan bilangan bulat memanjang sampai tak terhingga.” Jadi Boolos dan Jeffrey mengatakan bahwa algoritma menyiratkan petunjuk untuk sebuah proses yang “menciptakan” integer output dari sebuah integer “sewenang-wenang” masukan atau bilangan bulat bahwa, dalam teori, dapat dipilih dari 0 hingga tak terbatas. Sehingga, kita dapat mengharapkan sebuah algoritma untuk menjadi persamaan aljabar seperti m n y = + – dua sewenang-wenang “variabel masukan” m dan n yang menghasilkan output y.

Seperti yang kita lihat dalam Karakterisasi Algoritma – algoritma kata menyiratkan lebih daripada ini, sesuatu di urutan (misalnya Selain kami): Precise instruksi (dalam bahasa yang dimengerti oleh “komputer”) untuk proses “cepat, efisien, baik” yang menentukan “bergerak” dari “komputer” (mesin atau manusia, dilengkapi dengan internal lengkap diperlukan informasi dan kemampuan) untuk menemukan, decode, dan kemudian mengunyah input sembarang bilangan bulat / simbol m dan n, simbol + dan = … dan (andai, benar, “efektif”) menghasilkan, dalam waktu yang “masuk akal”, output-integer y di tempat tertentu dan dalam format tertentu.
Konsep algoritma juga digunakan untuk menentukan gagasan decidability. gagasan itu adalah pusat untuk menjelaskan bagaimana sistem formal terwujud mulai dari satu set kecil aksioma dan aturan. Dalam logika, waktu yang algoritma membutuhkan untuk menyelesaikan tidak dapat diukur, karena tidak tampaknya terkait dengan adat dimensi fisik kami. Dari ketidakpastian seperti itu, yang menjadi ciri pekerjaan yang sedang berlangsung, batang tidak tersedianya definisi algoritma yang sesuai baik beton (dalam arti tertentu) dan penggunaan istilah abstrak.

Formalisasi

Algoritma sangat penting untuk cara informasi proses komputer. Banyak program komputer berisi algoritma yang menentukan instruksi khusus komputer harus melakukan (dalam urutan tertentu) untuk melaksanakan tugas tertentu, seperti perhitungan gaji karyawan atau laporan pencetakan kartu siswa. Dengan demikian, algoritma yang dapat dianggap sebagai salah urutan operasi yang dapat disimulasikan oleh sistem Turing-lengkap. Penulis yang menyatakan tesis ini meliputi Minsky (1967), Savage (1987), dan Gurevich (2000):  Minsky: “Tapi kami juga akan menjaga, dengan Turing… Bahwa prosedur apapun yang bisa” alami “disebut efektif, sebenarnya dapat diwujudkan dengan mesin (sederhana). Meskipun ini mungkin tampak ekstrim, argumen… Di mendukungnya sulit untuk menolak “. argumen informal Gurevich: “… Turing mendukung tesisnya membenarkan tesis kuat: setiap algoritma dapat disimulasikan dengan mesin Turing … menurut Savage [1987], algoritma merupakan proses komputasi didefinisikan oleh mesin Turing” .

Biasanya, ketika sebuah algoritma yang terkait dengan pengolahan informasi, data yang dibaca dari sumber input, ditulis ke perangkat output, dan / atau disimpan untuk diproses lebih lanjut.Data Tersimpan dianggap sebagai bagian dari negara bagian internal dari entitas melakukan algoritma. Dalam prakteknya, negara disimpan dalam satu atau lebih struktur data. Untuk setiap proses komputasi tersebut, algoritma harus ketat didefinisikan: ditentukan dengan cara itu diterapkan pada semua keadaan kemungkinan yang bisa timbul. Artinya, setiap langkah bersyarat harus ditangani dengan sistematis, kasus per kasus; kriteria untuk setiap kasus harus jelas (dan komputasi).

Karena algoritma adalah daftar langkah-langkah yang tepat tepat, urutan perhitungan akan selalu penting untuk fungsi algoritma. Instruksi biasanya diasumsikan terdaftar secara eksplisit, dan digambarkan sebagai mulai “dari atas” dan akan “turun ke bawah“, sebuah ide yang dijelaskan secara lebih formal dengan aliran kontrol. Sejauh, ini diskusi mengenai formalisasi algoritma telah diasumsikan tempat dari pemrograman imperatif. Ini adalah konsep yang paling umum, dan mendiskripsikan tugas dalam diskrit, “mekanik” berarti. Unik ini konsepsi tentang algoritma formal adalah tugas operasi, pengaturan nilai variabel. Ini berasal dari intuisi “Memori” sebagai sebuah papan penggaris. Ada contoh di bawah ini seperti sebuah tugas. Untuk beberapa konsep-konsep alternatif dari apa yang merupakan algoritma lihat pemrograman fungsional dan logika pemrograman.

Pemberhentian

Beberapa penulis membatasi definisi algoritma untuk prosedur yang akhirnya selesai. Dalam kategori Kleene tempat prosedur “keputusan atau keputusan metode atau algoritma untuk pertanyaan” [7] Lain-lain, termasuk Kleene,. Termasuk prosedur yang dapat berjalan selamanya tanpa berhenti, seperti prosedur telah disebut “metode komputasi” [8 ] atau “perhitungan prosedur atau algoritma (dan karenanya masalah perhitungan) sehubungan dengan pertanyaan umum yang diperlukan untuk menjawab, bukan ya atau tidak, tetapi menunjukkan beberapa objek”.

Minsky membuat pengamatan yang bersangkutan, dalam hal menentukan apakah suatu algoritma akhirnya akan berakhir (dari keadaan awal tertentu): Tetapi jika panjang prosesnya tidak diketahui sebelumnya, kemudian “mencoba” itu mungkin tidak menentukan, karena jika proses tidak berlangsung selamanya – maka pada waktu tidak akan pernah kita pastikan jawabannya. Seperti yang terjadi, tidak ada metode lain bisa melakukannya lebih baik, seperti yang ditunjukkan oleh Alan Turing dengan hasil merayakan nya di undecidability masalah menghentikan apa yang disebut. Tidak ada prosedur algoritma untuk menentukan apakah algoritma sewenang-wenang atau tidak mereka menghentikan dari negara-negara mulai diberikan. Analisis algoritma untuk kemungkinan mereka disebut analisis terminasi pengakhiran.

Lihat contoh (im-) “pengurangan yang tepat” di fungsi parsial untuk lebih lanjut tentang apa yang bisa terjadi jika algoritma tertentu gagal untuk nomor input – misalnya, (i) non-terminasi, (ii) produksi “sampah” ( output dalam format yang salah untuk dipertimbangkan angka) atau tidak ada nomor (s) sama sekali berhenti (berakhir perhitungan dengan output tidak), (iii) nomor yang salah (s), atau (iv) kombinasi ini. Kleene mengusulkan agar produksi “” kegagalan sampah atau untuk menghasilkan nomor diselesaikan dengan memiliki algoritma mendeteksi dan menghasilkan contoh ini misalnya, pesan kesalahan (dia menyarankan “0”), atau lebih baik, kekuatan algoritma menjadi sebuah lingkaran tak berujung. [10] Davis (1958) melakukan ini untuk algoritma pengurangan itu – ia perbaikan algoritma dalam contoh kedua sehingga tepat pengurangan dan berakhir. [11] Seiring dengan hasil logis “benar” dan “palsu” Kleene (1952 ) juga mengusulkan penggunaan simbol logis ketiga “u” – [ragu-ragu 12] – sehingga algoritma akan selalu menghasilkan sesuatu ketika dihadapkan dengan menawarkan “”. Masalah jawaban yang salah harus diselesaikan dengan bukti “independen” dari misalnya algoritma, dengan menggunakan induksi: Kami biasanya memerlukan bukti tambahan untuk [bahwa algoritma ini dengan benar mendefinisikan] mu fungsi rekursif, misalnya, dalam bentuk bukti yang induktif, untuk setiap nilai argumen, perhitungan berakhir dengan nilai yang unik.

Mengekspresikan] algoritma

Algoritma dapat disajikan dalam berbagai jenis notasi, termasuk bahasa alam, pseudo, diagram alur, bahasa pemrograman atau tabel kontrol (diproses oleh interpreter). ungkapan bahasa alami dari algoritma cenderung verbose dan ambigu, dan jarang digunakan untuk algoritma kompleks atau teknis. Pseudocode, diagram alir dan tabel kontrol terstruktur cara untuk mengekspresikan algoritma yang banyak menghindari ambiguitas umum dalam laporan bahasa alami, sambil tetap independen dari suatu bahasa implementasi tertentu. Pemrograman bahasa terutama ditujukan untuk mengekspresikan algoritma dalam bentuk yang dapat dieksekusi oleh komputer, tetapi seringkali digunakan sebagai cara untuk mendefinisikan atau dokumen algoritma. Ada berbagai kemungkinan representasi dan satu dapat mengungkapkan program Mesin Turing diberikan sebagai urutan tabel mesin (lihat lebih lanjut di mesin negara yang terbatas dan tabel keadaan transisi), sebagai diagram alir (melihat lebih banyak pada diagram keadaan), atau sebagai suatu bentuk kode mesin elementer atau kode assembly disebut “set quadruples” (melihat lebih banyak pada mesin Turing).

Kadang-kadang membantu dalam deskripsi algoritma untuk melengkapi kecil “flow chart” (diagram negara bagian) dengan alam-bahasa dan / atau ekspresi aritmatika tertulis di dalam “diagram blok” untuk meringkas apa yang “flow chart” adalah pelaksanaannya.
Representasi dari algoritma umumnya digolongkan menjadi tiga tingkatan yang diterima mesin Turing Deskripsi: tingkat tinggi Deskripsi: “… Prosa untuk menggambarkan sebuah algoritma, mengabaikan rincian pelaksanaan Pada tingkat ini kita tidak perlu menyebutkan bagaimana mengelola tape mesin atau kepala..”

Implementasi deskripsi: “… Prosa digunakan untuk mendefinisikan cara menggunakan mesin Turing kepala dan cara yang menyimpan data pada pita yang Pada tingkat ini kita tidak memberikan rincian negara atau fungsi transisi..”  Formal Deskripsi: Paling rinci, “” tingkat terendah, memberikan “negara mesin Turing meja”. Untuk contoh algoritma sederhana “Tambah n + m” yang diuraikan dalam ketiga tingkat lihat contoh Algoritma.

Algoritma Komputer

Dalam sistem komputer, sebuah algoritma pada dasarnya adalah sebuah contoh dari logika dalam perangkat lunak yang ditulis oleh pengembang perangkat lunak akan berlaku efektif untuk target “dimaksudkan” komputer (s), agar software pada mesin target untuk melakukan sesuatu. Misalnya, jika seseorang menulis perangkat lunak yang seharusnya untuk mencetak dokumen PDF yang terletak di folder sistem operasi “/ My Documents” pada drive komputer “D:” setiap Jumat pukul 10:00, mereka akan menulis algoritma yang menentukan berikuttindakan: “Jika tanggal hari ini (waktu komputer) adalah ‘Jumat,’ membuka dokumen di ‘D: / My Documents’ dan memanggil fungsi ‘cetak'”. Sementara ini algoritma sederhana tidak melihat apakah printer sudah cukup kertas atau apakah dokumen tersebut telah pindah ke lokasi yang berbeda, orang bisa membuat algoritma ini lebih kuat dan mengantisipasi masalah ini dengan menulis kembali sebagai pernyataan KASUS formal atau sebagai a (hati-hati crafted) urutan laporan IF-THEN-ELSE. [16] Sebagai contoh laporan KASUS mungkin muncul sebagai berikut (ada kemungkinan lain):

  1. KASUS 1: tanggal hari ini JIKA TIDAK MAKA Jumat keluar instruksi ini CASE ELSE
  2. KASUS 2: JIKA tanggal hari ini adalah Jumat DAN dokumen ini terletak di ‘D: / My Documents’ DAN ada kertas di printer KEMUDIAN mencetak dokumen (dan keluar instruksi ini CASE) ELSE
  3. KASUS 3: JIKA tanggal hari ini adalah Jumat DAN dokumen TIDAK terletak di ‘D: / My Documents’ KEMUDIAN dokumen ditampilkan ‘tidak ditemukan’ pesan kesalahan (dan keluar dari instruksi ini CASE) ELSE
  4. KASUS 4: JIKA tanggal hari ini adalah Jumat DAN dokumen ini terletak di ‘D: / My Documents’ DAN TIDAK ada kertas di printer MAKA (i) dari tampilan ‘kertas’ pesan kesalahan dan (ii) keluar.

Catatan KASUS bahwa 3 mencakup dua kemungkinan: (i) dokumen TIDAK terletak di ‘D: / My Documents’ DAN ada kertas di printer OR (ii) dokumen TIDAK terletak di ‘D: / My Documents’ DAN ada NO kertas di printer. Urutan tes IF-THEN-ELSE akan terlihat seperti ini:

  1. TEST 1: tanggal hari ini JIKA TIDAK MAKA dilakukan Jumat ELSE TEST 2:
  2. TEST 2: JIKA TIDAK dokumen terletak di ‘D: / My Documents’ KEMUDIAN dokumen ditampilkan ‘tidak ditemukan’ pesan kesalahan ELSE TEST 3:
  3. TEST 3: JIKA TIDAK ada kertas di printer KEMUDIAN keluar tampilan ‘kertas’ pesan kesalahan cetak ELSE dokumen. Contoh-contoh ‘logika didahulukan hibah ke instance dari “dokumen NO di’ D: /” My Documents “. Juga amati bahwa dalam sebuah pernyataan KASUS yang dikarang dengan baik atau urutan laporan IF-THEN-ELSE jumlah berbeda tindakan-4 dalam contoh: melakukan apa-apa, mencetak dokumen, dokumen layar ‘tidak ditemukan’, dari tampilan ‘kertas’ – sama dengan jumlah kasus. Mengingat memori tak terbatas, mesin komputasi dengan kemampuan untuk melaksanakan salah satu set laporan KASUS atau urutan pernyataan IF-THEN-ELSE adalah Turing lengkap.Oleh karena itu, segala sesuatu yang dapat dihitung dapat dihitung dengan mesin ini. Bentuk algoritma adalah dasar pemrograman komputer dalam segala bentuk (lihat lebih lanjut di formalisme McCarthy).

Implementasi

Kebanyakan algoritma dimaksudkan untuk diterapkan program-program komputer. Namun, algoritma juga diimplementasikan dengan cara lain, seperti dalam jaringan saraf biologis (misalnya, otak manusia menerapkan aritmatika atau serangga yang mencari makanan), dalam sebuah sirkuit listrik, atau dalam sebuah alat mekanik.

Contoh Algoritma

Sebuah animasi dari algoritma quicksort penyortiran array nilai acak. Bar merah menandai elemen poros; pada awal animasi, elemen paling jauh ke sisi kanan dipilih sebagai poros.
Salah satu algoritma yang paling sederhana adalah untuk menemukan nomor terbesar di daftar (disortir) nomor. Solusi ini tentu membutuhkan melihat setiap nomor dalam daftar, tetapi hanya sekali di masing-masing. Dari ini mengikuti suatu algoritma sederhana, yang dapat dinyatakan dalam deskripsi tingkat tinggi prosa bahasa Inggris, seperti:
Tingkat tinggi Deskripsi:
Asumsikan item pertama adalah terbesar.
Lihatlah setiap item yang tersisa dalam daftar dan jika lebih besar dari item yang terbesar sejauh ini, buatlah catatan tentang itu.
Yang terakhir mencatat item adalah yang terbesar dalam daftar ketika proses selesai.
(Quasi-deskripsi) formal: Ditulis dalam bentuk prosa tapi lebih dekat ke bahasa tingkat tinggi program komputer, berikut ini adalah pengkodean yang lebih formal dari algoritma dalam pseudo atau pidgin kode:
Algoritma LargestNumber
Input: Daftar non-kosong nomor L.
Output: Jumlah terbesar dalam daftar L.

← terbesar L0
untuk setiap item dalam daftar L, ≥ 1 lakukan
jika> item terbesar, kemudian
← terbesar item
kembali terbesar
“←” adalah singkatan longgar untuk “berubah menjadi”. Misalnya, “item ← terbesar” berarti bahwa nilai perubahan terbesar terhadap nilai barang.
“Kembali” berakhir algoritma dan output nilai yang berikut.
Untuk contoh yang lebih kompleks algoritma, lihat algoritma Euclid untuk pembagi bersama terbesar, salah satu algoritma paling awal yang diketahui.
[Sunting] analisis algorithmic

Analisis Algoritma

Hal ini sering penting untuk mengetahui berapa banyak sumber daya tertentu (seperti waktu atau penyimpanan) yang secara teoritis diperlukan untuk algoritma yang diberikan. Metode telah dikembangkan untuk analisis algoritma untuk mendapatkan jawaban kuantitatif tersebut (perkiraan), misalnya, algoritma di atas memiliki kebutuhan waktu O (n), dengan menggunakan notasi O besar dengan n sebagai panjang daftar. Pada setiap waktu algoritma hanya perlu mengingat dua nilai: jumlah terbesar yang ditemukan sejauh ini, dan posisi saat ini dalam daftar input. Oleh karena itu dikatakan memiliki kebutuhan ruang O (1), jika ruang yang diperlukan untuk menyimpan angka-angka masukan tidak dihitung, atau O (n) jika dihitung. Algoritma yang berbeda dapat menyelesaikan tugas yang sama dengan seperangkat instruksi yang berbeda dalam waktu kurang atau lebih, ruang, atau ‘usaha’ dari yang lain. Sebagai contoh, sebuah algoritma pencarian biner biasanya akan mengungguli kekuatan kasar pencarian sekuensial ketika digunakan untuk lookup tabel pada daftar diurutkan.

Formal versus empiris

Artikel utama: algorithmics empiris, Profil (pemrograman komputer), dan Program optimasi Bagian ini membutuhkan ekspansi. Analisis dan studi tentang algoritma adalah disiplin ilmu komputer, dan sering dipraktekkan secara abstrak tanpa menggunakan bahasa pemrograman tertentu atau implementasi. Dalam pengertian ini, analisis algoritma mirip disiplin matematika lain yang berfokus pada sifat dasar algoritma dan bukan pada spesifik dari setiap pelaksanaan tertentu. Biasanya pseudo yang digunakan untuk analisa karena merupakan representasi paling sederhana dan paling umum.Namun, pada akhirnya, kebanyakan algoritma biasanya diterapkan pada perangkat keras tertentu platform perangkat lunak / dan efisiensi algoritma mereka akhirnya diuji menggunakan kode yang sebenarnya.

Pengujian empiris berguna karena dapat mengungkap interaksi tak terduga yang mempengaruhi kinerja. Sebagai contoh algoritma yang tidak memiliki wilayah referensi mungkin memiliki kinerja yang jauh lebih buruk dari yang diperkirakan karena ‘thrashes cache’. Tingkatan yang dicapai dapat digunakan untuk membandingkan sebelum / setelah perbaikan potensi untuk algoritma setelah program optimasi.

Klasifikasi

Ada berbagai cara untuk mengklasifikasikan algoritma, masing-masing dengan kemampuannya sendiri.

Dengan implementasi

Salah satu cara untuk mengklasifikasikan algoritma adalah dengan cara penerapan. Rekursi atau iterasi: Algoritma rekursif adalah salah satu yang memanggil (mengambil referensi) itu sendiri berulang kali sampai kondisi tertentu cocok, yang merupakan metode umum untuk pemrograman fungsional. Algoritma iteratif menggunakan konstruksi seperti loop repetitif dan kadang-kadang struktur data tambahan seperti tumpukan untuk memecahkan masalah yang diberikan. Beberapa masalah secara alamiah cocok untuk salah satu implementasi atau yang lain. Misalnya, menara Hanoi dipahami dengan baik dalam implementasi rekursif. Setiap versi rekursif memiliki setara (tapi mungkin lebih atau kurang kompleks) versi iteratif, dan sebaliknya.

Logical: algoritma dapat dilihat sebagai pengurang logis dikendalikan. gagasan ini dapat dinyatakan sebagai: Algoritma = kontrol logika +. [17] Komponen logika mengungkapkan aksioma yang dapat digunakan dalam perhitungan dan komponen kontrol menentukan cara pemotongan diterapkan pada aksioma. Ini adalah dasar paradigma pemrograman logika. Dalam bahasa pemrograman logika murni komponen kontrol tetap dan algoritma ditentukan oleh hanya menyediakan komponen logika. Daya tarik dari pendekatan ini adalah semantik elegan: perubahan dalam aksioma memiliki perubahan baik yang didefinisikan dalam algoritma.

Serial atau paralel atau terdistribusi: Algoritma biasanya dibahas dengan asumsi bahwa komputer menjalankan salah satu instruksi dari suatu algoritma sekaligus. Mereka kadang-kadang disebut komputer komputer serial. Sebuah algoritma yang dirancang untuk lingkungan seperti ini disebut sebagai algoritma serial, sebagai lawan dari algoritma paralel atau didistribusikan algoritma. algoritma paralel mengambil keuntungan dari arsitektur komputer mana beberapa prosesor dapat bekerja pada masalah pada saat yang sama, sedangkan algoritma didistribusikan menggunakan beberapa mesin terhubung dengan jaringan. algoritma paralel atau didistribusikan membagi masalah menjadi lebih subproblems simetris atau asimetris dan mengumpulkan kembali hasilnya bersama-sama. Konsumsi sumber daya dalam algoritma tersebut tidak siklus prosesor hanya pada masing-masing prosesor tetapi juga overhead komunikasi antara prosesor. algoritma Sorting dapat parallelized efisien, tetapi komunikasi mereka overhead mahal. Perancangan algoritma umumnya parallelizable. Beberapa masalah tidak memiliki algoritma paralel, dan disebut masalah inheren serial.

Deterministik atau non-deterministik: algoritma deterministik mengatasi masalah dengan keputusan yang tepat pada setiap langkah dari algoritma sedangkan algoritma non-deterministik memecahkan masalah melalui menebak meskipun tebakan khas dibuat lebih akurat melalui penggunaan heuristik. Tepat atau perkiraan: Meskipun banyak algoritma mencapai solusi yang tepat, algoritma aproksimasi mencari perkiraan yang dekat dengan solusi yang benar. Pendekatan dapat menggunakan salah satu strategi deterministik atau acak. algoritma tersebut memiliki nilai praktis untuk masalah keras banyak.

Dengan desain paradigma

Cara mengelompokkan algoritma adalah dengan metodologi desain atau paradigma. Ada sejumlah paradigma, masing-masing berbeda dari yang lain. Selanjutnya, masing-masing kategori akan mencakup berbagai jenis algoritma. Beberapa paradigma umumnya ditemukan meliputi: Brute-force atau pencarian yang melelahkan. Ini adalah metode naif mencoba solusi yang mungkin untuk melihat yang terbaik. Membagi dan menaklukkan. Sebuah membagi dan menaklukkan algoritma berulang kali mengurangi sebuah instance dari suatu permasalahan untuk satu atau lebih contoh kecil dari masalah yang sama (biasanya secara rekursif) sampai contoh cukup kecil untuk menyelesaikan dengan mudah. Salah satu contoh seperti divide dan menaklukkan adalah menggabungkan pengurutan. Sortasi dapat dilakukan pada setiap segmen data setelah membagi data menjadi segmen-segmen dan memilah seluruh data dapat diperoleh dalam menaklukkan fase dengan menggabungkan segmen-segmen. Varian sederhana dari membagi dan menaklukkan disebut penurunan dan menaklukkan algoritma, yang memecahkan sebuah subproblem identik dan menggunakan solusi subproblem ini untuk memecahkan masalah yang lebih besar. Membagi dan menaklukkan membagi masalah ke dalam beberapa subproblems sehingga menguasai panggung akan lebih kompleks daripada algoritma penurunan dan menaklukkan. Contoh penurunan dan menaklukkan algoritma adalah algoritma pencarian biner.

Pemrograman dinamis. Ketika suatu masalah menunjukkan substruktur optimal, yang berarti solusi optimal untuk masalah dapat dibangun dari solusi optimal untuk subproblems, dan tumpang tindih subproblems, artinya subproblems sama digunakan untuk memecahkan banyak kasus masalah yang berbeda, pendekatan yang lebih cepat disebut pemrograman dinamis menghindari recomputing solusi yang telah dihitung. Misalnya, jalan terpendek ke tujuan dari sebuah node dalam grafik berbobot dapat ditemukan dengan menggunakan jalur terpendek ke tujuan dari semua node yang berdekatan. pemrograman dinamis dan memoization pergi bersama-sama. Perbedaan utama antara pemrograman dinamis dan membagi dan menaklukkan subproblems adalah lebih atau kurang mandiri dalam membagi dan menaklukkan, sedangkan subproblems overlap dalam pemrograman dinamis. Perbedaan antara pemrograman dinamis dan rekursi langsung dalam cache atau memoization panggilan rekursif. Ketika subproblems adalah independen dan tidak ada pengulangan, memoization tidak membantu; pemrograman dinamis maka bukan merupakan solusi untuk semua masalah yang kompleks.Dengan menggunakan memoization atau menjaga tabel subproblems sudah diselesaikan, pemrograman dinamis mengurangi sifat eksponensial banyak masalah kompleksitas polinomial.

Metode serakah. Sebuah algoritma serakah mirip dengan sebuah algoritma pemrograman dinamis, tetapi perbedaannya adalah bahwa solusi atas subproblems tidak perlu diketahui pada setiap tahap, melainkan sebuah “serakah” pilihan dapat dibuat dari apa yang terlihat terbaik untuk saat ini. Metode serakah memperluas solusi dengan keputusan terbaik (tidak semua keputusan layak) pada tahap algoritmik berdasarkan optimum lokal saat ini dan keputusan terbaik (tidak semua keputusan yang mungkin) dibuat dalam tahap sebelumnya. Hal ini tidak lengkap, dan tidak memberikan jawaban yang akurat untuk banyak masalah. Tapi saat ia bekerja, maka akan metode tercepat. Algoritma rakus paling populer adalah menemukan pohon rentang minimal seperti yang diberikan oleh Kruskal.

Linear programming. Ketika memecahkan masalah dengan menggunakan programa linier, ketidaksetaraan yang spesifik melibatkan masukan ditemukan dan kemudian dilakukan usaha untuk memaksimalkan (atau mengurangi) fungsi linier dari masukan. Banyak masalah (seperti aliran maksimum untuk grafik diarahkan) dapat dinyatakan dalam cara linear programming, dan kemudian akan dipecahkan oleh suatu algoritma ‘generik’ seperti algoritma simpleks. Sebuah varian yang lebih kompleks disebut pemrograman linear integer programming, di mana ruang solusi adalah terbatas pada bilangan bulat.

Pengurangan. Teknik ini melibatkan pemecahan masalah sulit dengan mengubahnya menjadi masalah lebih dikenal yang kami dapatkan (mudah-mudahan) asimtotik algoritma yang optimal.Tujuannya adalah untuk menemukan suatu algoritma yang mengurangi kompleksitas tidak didominasi oleh algoritma dikurangi sehingga menyebabkan’s. Misalnya, satu pilihan algoritma untuk mencari median dalam daftar disortir melibatkan pertama menyortir daftar (bagian mahal) dan kemudian menarik keluar elemen tengah dalam daftar diurutkan (porsi murah). Teknik ini juga dikenal sebagai mengubah dan menaklukkan.

Cari dan pencacahan. Banyak masalah (seperti bermain catur) dapat dimodelkan sebagai masalah pada grafik. Algoritma eksplorasi grafik menentukan aturan untuk bergerak di sekitar grafik dan berguna untuk masalah tersebut. Kategori ini juga termasuk algoritma pencarian, cabang dan pencacahan terikat dan mundur. Algoritma Acak adalah mereka yang membuat beberapa pilihan secara acak (atau pseudo-acak), karena beberapa masalah, sebenarnya bisa dibuktikan bahwa solusi tercepat harus melibatkan beberapa keacakan. Ada dua kelas besar algoritma seperti: Monte Carlo algoritma kembali jawaban yang benar dengan probabilitas tinggi. Umpamanya RP adalah subkelas ini yang berjalan dalam waktu polinomial) Las Vegas algoritma selalu mengembalikan jawaban yang benar, tetapi waktu mereka berjalan hanya probabilistically terikat, misalnya ZPP. Dalam masalah optimasi, heuristik algoritma jangan mencoba untuk menemukan solusi optimal, tetapi solusi perkiraan dimana waktu atau sumber daya yang terbatas. Mereka tidak praktis untuk menemukan solusi yang sempurna. Contoh ini akan pencarian lokal, tabu search, atau algoritma simulasi annealing, sebuah kelas probabilistik algoritma heuristik yang berbeda-beda pemecahan masalah dengan jumlah acak. Nama “simulated annealing” menyinggung istilah metallurgic arti pemanasan dan pendinginan logam untuk mencapai kebebasan dari cacat. Tujuan dari varians acak adalah menemukan dekat dengan solusi optimal global bukan hanya lokal yang optimal, gagasan bahwa unsur acak akan turun sebagai algoritma sudah turun untuk solusi. algoritma Aproksimasi adalah mereka algoritma heuristik yang memberikan beberapa tambahan batas tentang kesalahan. algoritma genetika berusaha mencari solusi untuk masalah dengan meniru proses evolusi biologis, dengan siklus mutasi acak menghasilkan generasi-generasi “solusi”. Jadi, mereka meniru reproduksi dan “survival of the” fittest. Dalam pemrograman genetik, pendekatan ini diperpanjang untuk algoritma, oleh tentang algoritma itu sendiri sebagai solusi “” untuk masalah.

Pada bidang studi

Setiap bidang ilmu memiliki masalah sendiri dan kebutuhan algoritma efisien. Terkait masalah di satu bidang sering belajar bersama. Beberapa kelas contoh adalah algoritma pencarian, algoritma pengurutan, menggabungkan algoritma, algoritma numerik, algoritma graf, algoritma string, algoritma geometrik komputasi, algoritma kombinatorial, pembelajaran mesin, kriptografi, algoritma kompresi data dan teknik parsing. Fields cenderung tumpang tindih dengan satu sama lain, dan kemajuan algoritma di satu bidang dapat memperbaiki orang lain, kadang-kadang sama sekali tidak berhubungan, ladang. Sebagai contoh, pemrograman dinamis diciptakan untuk optimasi konsumsi sumber daya dalam industri, namun sekarang digunakan dalam memecahkan berbagai masalah di berbagai bidang.

Dengan kompleksitas

Lihat juga: kelas Kompleksitas dan kompleksitas parameterized. Algoritma dapat diklasifikasikan oleh jumlah waktu yang mereka butuhkan untuk menyelesaikan dibandingkan dengan ukuran masukan mereka. Ada berbagai macam: beberapa algoritma linier lengkap dalam waktu relatif terhadap ukuran input, beberapa melakukannya dalam jumlah yang eksponensial waktu atau bahkan lebih buruk, dan beberapa tidak pernah berhenti. Selain itu, beberapa masalah mungkin memiliki beberapa algoritma yang berbeda kompleksitas, sementara masalah lain mungkin tidak punya algoritma algoritma efisien atau tidak dikenal. Ada juga pemetaan dari masalah ke masalah lain. Karena ini, ditemukan lebih cocok untuk mengklasifikasikan masalah-masalah sendiri bukan algoritma ke dalam kelas kesetaraan berdasarkan kompleksitas algoritma yang terbaik untuk mereka.

Dengan menghitung daya

Lain untuk mengklasifikasikan algoritma adalah dengan daya komputasi. Hal ini biasanya dilakukan dengan mempertimbangkan beberapa koleksi (kelas) dari algoritma. Sebuah kelas rekursif dari algoritma adalah salah satu yang termasuk algoritma untuk semua Turing fungsi komputasi. Melihat kelas algoritma memungkinkan untuk membatasi kemungkinan sumber daya komputasi yang tersedia (waktu dan memori) yang digunakan dalam sebuah perhitungan. Kelas subrecursive algoritma adalah satu di mana tidak semua fungsi komputasi Turing dapat diperoleh. Sebagai contoh, algoritma yang dijalankan dalam waktu polinomial cukup untuk jenis yang penting banyak perhitungan tapi jangan buang semua Turing fungsi komputasi. Kelas algoritma diimplementasikan oleh fungsi-fungsi primitif rekursif subrecursive kelas lain.

Burgin (2005, hal 24) menggunakan definisi umum dari algoritma yang menenangkan persyaratan umum bahwa output dari algoritma yang menghitung fungsi harus ditentukan setelah sejumlah langkah terbatas. Dia mendefinisikan kelas super-rekursif dari algoritma sebagai “kuliah algoritma di mana dimungkinkan untuk menghitung fungsi tidak dapat dihitung oleh mesin Turing” (Burgin 2005, hal 107). Hal ini erat terkait dengan metode studi hypercomputation.

Sumberhttp://en.wikipedia.org