Apa itu algoritma?

12

Apa sebenarnya algoritma itu, seperti apa yang dimaksud dengan Algoritma? Sedikit yang saya mengerti kata itu, adalah bahwa itu tidak spesifik untuk bahasa tertentu, atau pola desain, melainkan itu salah satu prinsip paling dasar (jadi saya kira pertanyaan ini membuat saya terlihat bodoh).

Salah satu "opsi" yang saya miliki untuk memahaminya, adalah bahwa itu berarti metode untuk menyelesaikan sesuatu, yang dapat ditulis sebagai daftar dalam pseudocode.

Ketika saya menulis kode yang lebih rumit, saya pikir apa yang perlu dilakukan, dengan apa, dan bagaimana saya akan sampai di sana (bukan dalam bahasa pemrograman), kemudian menulisnya dalam kode. Apakah itu cara yang baik untuk melakukannya, dan apakah itu ada hubungannya dengan algoritma?

(Saya ingin bertanya di sini lebih pada Stackoverflow, karena ini bukan tentang masalah tertentu / bahasa plus saya merasa bahwa mayoritas orang di sini tahu 'mengapa', atau setidaknya jawaban di sini lebih rinci, daripada pada Stackoverflow di mana berbeda, saya minta maaf jika saya harus bertanya di sana)

Jonathan.
sumber
5
Google? Wiki? google.com/search?q=algorithm
Maglob
1
@Apalala: Saya rasa batasan itu tidak berlaku.
Josh K
2
@Apalala: Terbatas , tidak dikenal .
Josh K
2
@ Jonathan: "kata-kata yang harus saya cari"? Kata yang mana? Lebih spesifik . Situs ini bukan sihir. Kami tidak mengenal Anda. Kami tidak tahu apa yang Anda baca. Kami tidak tahu apa yang membingungkan Anda. Harap spesifik .
S.Lott
1
@Apalala: "Hingga" berarti "terikat", tidak lebih. Suatu algoritma dijamin untuk berhenti kapan-kapan. Jauh lebih mudah untuk membuktikan keterbatasan ketika Anda memiliki semacam cara untuk memprediksi itu akan berakhir, jadi algoritma cenderung dapat diprediksi, tetapi prediktabilitas tidak dalam definisi algoritma yang biasa.
David Thornley

Jawaban:

19

Algoritme adalah urutan terbatas dari instruksi yang terdefinisi dengan baik untuk menghitung suatu fungsi (atau menjalankan suatu prosedur) yang berakhir dalam keadaan akhir yang terdefinisi dengan baik.

John Bode
sumber
1
+1. "Hingga, Didefinisikan dengan Baik, dan Efektif" adalah tiga kriteria dalam entri Wikipedia. Anda memiliki ketiganya di sini juga.
S.Lott
Saya siap untuk menonton video yang dikutip oleh @ Jörg, tetapi sudut pandang saya saat ini adalah bahwa tidak hanya langkah-langkahnya harus terbatas. Jika sumber daya (termasuk waktu) tidak dibatasi, maka prosedur dapat dipanggil atau dilabeli sebagai apa saja, tetapi bukan algoritma .
Apalala
@Apalala - Saya telah kembali membaca buku pelajaran saya, dan saya tidak melihat batasan itu di mana pun. Ada kemungkinan bahwa untuk tertentu set data atau masukan algoritma mungkin tidak mengakhiri (algoritma seperti metode Newton-Raphson untuk menemukan akar mungkin terjebak dalam lingkaran yang tidak pernah berakhir), tapi itu tidak membuat algoritma bukan algoritma.
John Bode
@ John Oscillations dapat dan secara rutin terdeteksi di Newton-Raphson.
Apalala
1
@Apalala: kedengarannya lebih seperti definisi program daripada algoritma. Gagasan langkah - langkah diskrit ini hadir dalam mesin Turing, mesin register, mesin akses acak, dan tentu saja di komputer fisik kita yang sebenarnya, juga di hampir setiap bahasa pemrograman dan bahkan, meskipun lebih tersirat, dalam kalkulus lambda. Tapi itu adalah pembatasan sewenang-wenang yang tidak melekat pada algoritma. Analog algoritma, misalnya, jangan tidak memiliki langkah-langkah diskrit (pada kenyataannya, itu adalah definisi dari algoritma analog), dan mereka dapat benar-benar dilaksanakan dengan komputer analog.
Jörg W Mittag
15

Ini sebenarnya pertanyaan yang cukup menarik, dan sebenarnya masih merupakan pertanyaan penelitian terbuka.

Yuri Gurevich, salah satu raksasa dari Algorithm Theory, saat ini memberikan seri kuliah video di situs komunitas Microsoft Channel9:

Seperti yang Anda lihat, pertanyaan Anda sebenarnya adalah judul dari kuliah kedua. Namun, saya sangat menyarankan Anda menonton mereka bertiga.

Yang pertama, khususnya, berisi beberapa contoh algoritma yang membatalkan hampir semua definisi yang diberikan dalam sebagian besar jawaban lain di sini.

Jörg W Mittag
sumber
2
Terima kasih atas tautannya. Anda akan melihat hal berikut dalam teks yang menyertai video pertama, sebagai bagian dari definisi algoritma: "akhirnya berakhir dalam keadaan akhir akhir". Pengakhiran adalah bagian penting dari definisi suatu algoritma. Itu sebabnya sistem operasi dan server non-terminasi bukan algoritma.
LIProf
4

Algoritma seperti resep memasak yang baik . Anda memiliki beberapa input, beberapa langkah menengah yang didefinisikan dengan baik dan mendapatkan hasil akhir.

Diterapkan untuk pemrograman, ini adalah deskripsi jelas dari langkah-langkah yang perlu Anda lakukan untuk menyelesaikan masalah tertentu. Apa pun yang dapat Anda tulis dalam bahasa pemrograman pilihan Anda dapat dilihat sebagai algoritma - tetapi biasanya istilah ini hanya digunakan untuk tugas-tugas logis atau matematika yang umum, seperti menyortir atau mencari.

Alexander Gessler
sumber
Ada banyak algoritma yang tidak selalu memberikan hasil akhir. Sistem operasi atau server web, misalnya, adalah suatu algoritma yang memberikan hasil akhir biasanya dianggap sebagai bug.
Jörg W Mittag
@ JörgWMittag tetapi apakah OS atau server web "sebuah algoritma"? Saya pikir mereka tidak - mereka dapat menyelesaikan sub-masalah dari domain mereka menggunakan algoritma - dan dalam setiap kasus, mereka pasti membutuhkan hasil akhir - tetapi mereka juga memiliki bagian yang bukan algoritma, dan secara keseluruhan mereka tidak ' algoritma t. (Seperti yang Anda katakan di komentar lain - OS dan server web adalah program tetapi tidak harus algoritma ).
Andres F.
2

Algoritma adalah seperangkat aturan atau proses (dalam perhitungan) yang digunakan untuk pemecahan masalah. Pada dasarnya, ada masalah, Anda menginginkan solusi, dan proses untuk solusi ini adalah sebuah algoritma. Algoritme memiliki seperangkat aturan / proses yang terbatas untuk mencapai solusi.

Jika Anda seperti Edsger W. Dijkstra , Anda akan menulis algoritme Anda di selembar kertas dan mengerjakan / memperbaiki algoritme di atas kertas hingga Anda puas dengan algoritme Anda. Kalau tidak (terutama ketika menulis dokumentasi), diagram alur digunakan untuk secara diagram mewakili aliran dari suatu algoritma / proses. Hal ini memungkinkan orang lain untuk mengkritik diagram alur dan meningkatkan jika perlu (tanpa khawatir tentang bahasa pemrograman apa yang diperlukan).

Saya tidak tahu apakah itu menjawab pertanyaan Anda.

Buhake Sindi
sumber
Saya tidak suka kata set karena itu berarti "tidak dipesan". Saya lebih suka "urutan", atau acara tuple untuk tinggal di area matematika
BenjaminB
@ Ubiquité, Set tidak selalu berarti "tidak dipesan". Anda dapat mengklasifikasikan satu set dalam pemesanan yang Anda inginkan (mis. Pemesanan acak). Namun, itu tidak memerlukan downvote karena interpretasi orang tentang kata "set". Plus, Anda dapat memiliki kumpulan senyawa, yang merupakan pengelompokan set, yang juga merupakan bagian dari algoritma. Oleh karena itu "set" dapat berupa apa saja, asalkan dengan tepat digunakan sebagai solusi algoritmik untuk suatu masalah.
Buhake Sindi
Saya tidak mengundurkan diri!
BenjaminB
Maaf, saya tidak bermaksud menyalahkan Anda atas downvote. Yang downvoter harus secara eksplisit memberikan alasan untuk downvote.
Buhake Sindi
1

Algoritma: serangkaian operasi yang tertata dengan baik yaitu 1) tidak ambigu dan 2) dapat dihitung secara efektif sehingga menjalankan operasi mulai dari yang pertama menghasilkan hasil setelah sejumlah operasi yang terbatas.

ThomasMcLeod
sumber
Contoh Counter: sistem operasi. Itu tidak menghasilkan hasil sama sekali , pada kenyataannya, itu biasanya dianggap sebagai bug.
Jörg W Mittag
@ Jorg, baik OS menghasilkan banyak hasil yang, secara bersamaan, menghasilkan hasil keseluruhan dari menyediakan layanan sistem untuk aplikasi.
ThomasMcLeod
@ JörgWMittag Seperti yang saya katakan di komentar lain kepada Anda, kesimpulan pengamatan Anda adalah bahwa sistem operasi sebenarnya bukan algoritma;)
Andres F.
1

Algoritma Ini adalah kombinasi dari langkah-langkah berurutan (langkah-langkah ini dapat berupa perhitungan, pemrosesan data, dan tugas penalaran) digunakan untuk menyelesaikan masalah dengan cara yang sangat sederhana dan efisien.

Ini dirancang paling efisien sehingga dapat diekspresikan dalam jumlah ruang dan waktu yang terbatas. kita bisa menerapkannya dalam bahasa pemrograman apa pun.

Properti suatu algoritma: berikut adalah sifat utama dari suatu algoritma: -

Algoritme harus memiliki nama yang unik. Seharusnya menetapkan set input dan output secara eksplisit. Algoritme harus berurutan dengan operasi yang tidak ambigu. Itu harus memiliki beberapa titik akhir, yaitu, ia berhenti dalam jumlah waktu yang terbatas. klik di sini untuk mempelajari tentang Desain dan Analisis Algoritma

Mohd Junaid
sumber
0

Saya menggunakan istilah ini untuk menjelaskan rumus untuk menyelesaikan masalah tertentu. Rumus tidak perlu ditulis dalam matematika atau memiliki hubungan 1: 1 dengan suatu metode. Di sekolah, algoritma dan struktur data terkait erat dan dapat ditulis sebagai rumus matematika atau terbukti menggunakan bukti.

P.Brian.Mackey
sumber
0

Algoritme adalah abstraksi dari program komputer, dan terdiri dari sekumpulan instruksi untuk mencapai beberapa tugas yang terdefinisi dengan baik dalam jumlah langkah yang terbatas, meskipun terikat pada jumlah langkah mungkin sangat besar dan langkah-langkah individu mungkin kompleks ( terbatas) tugas dalam hak mereka sendiri. Meskipun ada (benar) program yang secara keseluruhan dikenal-non-algoritmik, mereka semua bekerja dengan mengulangi potongan algoritmik dalam beberapa pola. (Lebih menarik adalah program-program yang status pemberhentiannya tidak diketahui, tetapi sebagian besar programmer tidak benar-benar berurusan dengan hal-hal seperti itu; Saya tahu saya tidak melakukannya!)

Donal Fellows
sumber
0

IMO tidak ada yang tahu :) Saya telah melihat istilah yang diterapkan hanya untuk fungsi perhitungan matematis, untuk setiap fungsi yang mengambil input dan menghasilkan output, dan untuk apa pun yang mengambil input dan melakukan semacam operasi di atasnya.

Apakah Anda menganggap salah satu dari semua ini sebagai algoritma?

  1. Suatu fungsi yang menghitung tingkat bunga pinjaman selama periode 20 tahun
  2. Logika bisnis yang memeriksa apakah semua informasi telah dimasukkan pada aplikasi pinjaman
  3. Sebuah finderfungsi yang query database untuk objek Pelanggan
  4. Fungsi "pembantu" yang membersihkan dan memformat entri data
  5. Fungsi yang mem-parsing file XML dan memetakan data ke objek bisnis
  6. Kelas yang mengambil input dan menulisnya ke file teks
Wayne Molina
sumber
0

Algoritma adalah sebuah ide, metode, teknik, "kecerdasan" untuk perhitungan atau pelaksanaan tugas yang sifatnya abstrak, tetapi saat dijalankan pada komputer di dunia nyata, kami bercita - cita untuk menggunakan sumber daya sesedikit mungkin. , yaitu, di dunia komputer, Waktu dan memori.

JasonGenX
sumber
0

Algoritme adalah urutan langkah yang didefinisikan dengan baik yang menghasilkan hasil dalam waktu yang terbatas.

Langkah yang terdefinisi dengan baik: Itu adalah sesuatu yang dapat Anda lakukan, atau hitung, yang didefinisikan dengan tepat. Hanya dengan membaca langkah Anda tahu apa yang harus Anda lakukan dan bagaimana melakukannya. Khususnya, Anda bisa menulisnya dalam bahasa pemrograman yang Anda tahu, dan pastikan fragmen programnya cocok dengan langkah itu.

Urutan: Langkah-langkah dieksekusi dalam urutan yang ditentukan. Langkah-langkah dapat dieksekusi lebih dari sekali tergantung pada data (loop) atau tidak dieksekusi sama sekali tergantung pada data (jika pernyataan). Algoritma paralel hanya memaksakan urutan parsial pada langkah-langkah, jadi saya terlalu menyederhanakan di sini. Akan lebih tepat untuk menggambarkannya sebagai set yang dipesan sebagian daripada urutan, tetapi saya ingin menjaga kata-kata sedikit lebih sederhana. Selain itu, mudah untuk menanamkan set yang dipesan sebagian dalam urutan penuh.

Hasil: Status atau nilai akhir. Itu tidak harus dapat diprediksi sebelumnya, tetapi itu harus menjadi tujuan yang pasti memenuhi beberapa kondisi. Ini berarti bahwa suatu sistem operasi bukanlah suatu algoritma, walaupun ia menggunakan banyak dari mereka.

Hingga: Algoritma dijamin untuk berhenti kapan saja, setidaknya pada mesin yang dapat berjalan cukup lama. Itu tidak selalu dijamin untuk berhenti dalam waktu yang dapat diprediksi, dan itu tidak dijamin bahwa itu akan berhenti sebelum matahari mengembang dan berubah merah pada setiap mesin yang ada. Ini juga berarti sistem operasi bukan suatu algoritma, karena idealnya akan berjalan selamanya. Saya telah melihat kata "prosedur" yang digunakan untuk menggambarkan sesuatu yang akan menjadi algoritma jika kami yakin itu akan berhenti kapan-kapan. (Dimungkinkan untuk memiliki algoritme yang akan berhenti dalam jumlah waktu yang tidak diketahui. Misalkan, katakan dugaan Goldbach terbukti salah secara matematis, dalam bukti nonkonstruksi, jadi ada bilangan genap> 2 yang bukan jumlah dari dua bilangan prima Algoritma yang hanya menguji bilangan genap akhirnya akan berakhir,

Algoritme adalah sesuatu yang sengaja abstrak, jadi kami tidak mempertimbangkan pertanyaan seperti "Apakah mungkin secara fisik untuk melakukan ini sebelum kematian panas Semesta?". Mereka akan terlalu sulit untuk dijawab. Jika terkait dengan operasi komputer, mudah untuk mengimplementasikannya dalam bahasa pemrograman.

David Thornley
sumber
-1

Jika saya harus memberikan definisi umum, saya akan mengatakan algoritma adalah formula untuk memecahkan masalah komputasi yang lebih kompleks daripada, dan akhirnya menjadi lebih efisien daripada, solusi yang jelas / kasar.

Juga, penting untuk dicatat bahwa suatu algoritma bukan kode sumber tertentu; itu perhitungannya sendiri. Antara lain, ini berarti bahwa bahasa apa pun yang lengkap Turing dapat menerapkan algoritma apa pun yang dapat diterapkan oleh bahasa lengkap Turing lainnya.

Mason Wheeler
sumber
Saya sangat menyukai jawaban ini, dan saya pikir kita bisa mengambilnya sedikit lebih jauh dan mengatakan (meskipun tidak terkait dengan pertanyaan awal): algoritma apa pun adalah pengoptimalan solusi pencarian brute force / tree. Bertanya-tanya apakah itu bisa dibuktikan secara formal.
mojuba
-1 "Algoritma" adalah istilah matematika yang didefinisikan dengan baik.
Apalala
1
@Apalala jadi apa yang menghentikan Anda dari mendefinisikan ulang demi kejelasan atau, katakanlah, pemahaman yang lebih baik tentang esensinya? Algoritma sebagai "seperangkat instruksi" hampir tidak ada artinya bagi saya.
mojuba
1
@mojuba Saya benar-benar tidak peduli jika istilah itu akan didefinisikan ulang, tapi saya pikir definisi tradisional bermanfaat, karena setidaknya dibedakan antara cara-cara mendekati masalah: Algoritme adalah resep untuk memecahkan masalah menggunakan sumber daya yang terbatas. . Ubah definisi itu, dan konsekuensi yang dapat diperkirakan adalah bahwa kita harus membuat kata lain yang artinya sama. Menisik! Semua pengetahuan yang diperoleh di abad yang lalu tentang komputasi dan kompleksitas hilang tanpa definisi algoritma yang baik !
Apalala
1
Pencarian brute force adalah suatu algoritma. Ini umumnya bukan algoritma yang cantik, dan umumnya tidak layak ditulis. Saya tidak melihat manfaat nyata dalam mengecualikan brute force, dan dalam banyak kasus tidak jelas apa arti sebenarnya "lebih baik daripada brute force".
David Thornley