Manakah algoritma signifikan untuk umat manusia dalam beberapa dekade terakhir? [Tutup]

40

Algoritma terpenting di dunia mana yang paling banyak berkontribusi bagi umat manusia dalam beberapa dekade terakhir?

Saya pikir ini adalah pengetahuan umum yang baik untuk diketahui pengembang.

Pembaruan:
Jika memungkinkan, harap simpan jawaban untuk algoritme pemrograman tertentu .
Saya ingin mendapatkan daftar yang paling penting, hanya satu algoritma per jawaban.
Harap pertimbangkan untuk menyatakan mengapa algoritme ini penting dan penting ...

Amir Rezaei
sumber
2
Itu sedang ditutup karena (sejauh ini) empat orang menganggapnya "bukan pertanyaan nyata", mungkin karena kita tidak punya ide nyata apa, dalam isolasi, algoritma pemrograman yang penting.
David Thornley
2
Mungkin di luar topik, tapi ini pertanyaan nyata.
Jeremy
1
+1 pertanyaan bagus. Saya sarankan menanyakan ulang ini di cstheory.stackexchange.com
Aleksandr Levchuk
1
Mengapa Anda menjawab pertanyaan Anda sendiri? Beberapa kali?
2
Tidak ada jawaban yang salah + jumlah jawaban yang tidak terbatas + komentar yang jelas yang menanyakan "satu per jawaban" + penulis memposting beberapa jawaban sendiri = kasus buku teks dari pertanyaan yang tidak konstruktif. Saya tahu ini sudah tua, tapi mari kita tutup ini.
Aaronaught

Jawaban:

59

Enkripsi kunci publik / pribadi sangat penting. Perdagangan internet tidak akan ada di mana-mana tanpa itu.

Jeremy
sumber
4
+1 dan untuk menambahkan jawaban Anda, RSA.
agak
Ada seluruh kelompok algoritma dan praktik terbaik yang terlibat dalam mengubah kode kriptografi (seperti RSA) menjadi solusi praktis.
Donal Fellows
37

Algoritma Dijkstra

Algoritma ada di setiap router di dunia, untuk mengidentifikasi rute terbaik antara dua node dalam jaringan.

Amir Rezaei
sumber
Apakah kamu yakin Sebagian besar router tahu bahwa nomor IP itu miliknya dan meneruskannya ke mesin di jaringan lokal, atau tahu router yang lebih tahu - router default - dalam hal ini paket pergi ke router itu. Router besar mungkin tahu bahwa untuk rentang alamat IP X1-Y1 paket harus pergi ke router R1, untuk rentang X2-Y2 paket harus pergi ke router R2, dll. Tidak ada algoritma Dijkstras yang terlibat dalam hal ini.
2
@ Thorbjørn Ravn Andersen: Tetapi bagi router untuk mengetahui informasi itu, seseorang pada titik tertentu harus menggunakan algoritma Dijkstra. Ya, itu tidak digunakan untuk benar-benar merutekan setiap paket individu, tetapi digunakan dalam menentukan tabel routing pada jaringan besar. +1.
Billy ONeal
@ Billy, di mana tepatnya Anda berharap bahwa algoritma Dijkstra benar-benar digunakan dan oleh siapa?
@ Thorbjørn Ravn Andersen: Menurut pemahaman saya, ini berperan dalam OSPF, yang merupakan dasar untuk memilih rute yang benar untuk jaringan kecil. Koneksi antara jaringan yang lebih besar menggunakan BGP, yang lebih berbasis kebijakan. Saya tidak yakin apakah BGP menggunakan algoritma Dijkstra atau tidak.
Billy ONeal
3
@ Billy, tapi keberatan saya adalah "ada di SETIAP router di dunia". Itu - menurut saya - jelas salah.
30

Transformasi Fourier Cepat (FFT)

FFT adalah metode yang sangat penting dan banyak digunakan untuk mengekstraksi informasi yang berguna dari sinyal sampel .

Transformasi Fourier cepat (FFT) adalah algoritma yang efisien untuk menghitung transformasi Fourier diskrit (DFT) dan kebalikannya.

Amir Rezaei
sumber
4
Saya pernah punya bos yang, beberapa dekade sebelumnya, telah menulis serangkaian fungsi FFT untuk PDP-11. Dia menjual setumpuk kartu punch dengan fungsi-fungsi itu dengan iklan di belakang Popular Science, dan membuat bank yang cukup serius. Jelas dia memiliki orang-orang yang menggunakan kodenya untuk semuanya, mulai dari pemrosesan sinyal hingga prediksi pasar saham.
Dan Ray
26

Peringkat halaman

PageRank adalah algoritma analisis tautan, dinamai menurut Larry Page, digunakan oleh mesin pencarian Internet Google yang memberikan bobot numerik untuk setiap elemen kumpulan dokumen yang hyperlink, seperti World Wide Web, dengan tujuan "mengukur" relatifnya pentingnya dalam set.

Amir Rezaei
sumber
haha, jawaban kami hanya berjarak 2 detik, maaf :)
Maksee
tidak masalah sama sekali! :)
Amir Rezaei
36
Saya tidak pernah menyadari itu dinamai Larry Page. Saya selalu menganggap nama itu ada hubungannya dengan Halaman Web.
JohnFx
1
@ JohnFx Whoa, jangan bercanda!
Mark C
+1: tetapi bisakah itu memenuhi syarat jika algoritma yang sebenarnya tidak diketahui manusia? (IIRC wikipedia adalah perkiraan)
Steven Evers
22

Algoritma kompresi data

Dalam ilmu komputer dan teori informasi, kompresi data atau pengkodean sumber adalah proses pengkodean informasi menggunakan bit lebih sedikit (atau unit pembawa informasi lainnya) daripada representasi yang tidak didekode akan menggunakan, melalui penggunaan skema pengkodean tertentu.

Amir Rezaei
sumber
2
Tepat dan saya pikir algoritma kompresi dasar LZW dapat dianggap sebagai salah satu algoritma paling indah dalam rekayasa perangkat lunak.
mojuba
"jika mungkin berikan nama algoritma spesifik"
14

Smith-Waterman (dan Needleman-Wunsch)

Ini mungkin terlalu jauh, jadi tolong beri komentar.

Smith-Waterman: Algoritma Sequence Alignment

Saya pikir salah satu contohnya adalah algoritma Smith-Waterman dan Needleman-Wunsch dan perkiraannya. Semuanya pada dasarnya melakukan hal yang sama: mereka menyelaraskan dua atau lebih string (urutan) . Ada arti penting dalam Biologi. Ketika sekuens DNA atau Protein diselaraskan - daerah kesamaan struktural, fungsional, dan evolusioner terungkap.

BLAST sebagai keturunan Smith-Waterman

Heuristik yang mendekati Smith-Waterman adalah BLAST. Ini memungkinkan pencarian urutan database besar untuk kesamaan Biologis. Popularitas BLAST benar-benar hebat - kemungkinan besar algoritma yang paling banyak digunakan dalam Biologi. Area yang lebih baru dalam Bioinformatika dan Genomik memiliki perkiraan yang lebih baru dan lebih baik dari algoritma Smith-Waterman / Needleman-Wunsch yang lebih akurat daripada BLAST.

Majelis Genom sebagai keturunan Smith-Waterman

Perkiraan throughput tinggi dari Smith-Waterman dan Needleman-Wunsch yang lebih cepat dari BLAST digunakan untuk merakit Genom dari sekuensing senapan - di mana produk dari mesin sequencer adalah sejumlah besar DNA yang dibaca (miliaran) dari bagian acak dari Genome yang sangat pendek (50 hingga 100 nukleotida). Pendekatan ini digunakan untuk menyelesaikan Proyek Genom Manusia. Semua urutan modern dilakukan dengan cara ini.

Multiple Sequence Alignment merupakan perpanjangan dari Smith-Waterman

Algoritma Multiple Sequence Alignment Banyak ada - mereka mendekati versi multi-urutan Smith-Waterman / Needleman-Wunsch. Berbagai urutan disejajarkan sebagai satu kelompok secara bersamaan satu sama lain. Ini adalah masalah yang jauh lebih sulit daripada pasangannya yang berpasangan, tetapi solusinya memberikan lebih banyak wawasan tentang fungsi, struktur, dan sejarah evolusi dari sekuens terkait.

Aleksandr Levchuk
sumber
Halo dan selamat datang di Programer! Anda mungkin ingin memecah jawaban ini menjadi satu untuk masing-masing algoritma yang Anda sajikan di sini karena itu adalah kebiasaan untuk daftar pertanyaan seperti ini untuk memfasilitasi pemilihan dan penyortiran.
Yi Jiang
@Yi Jiang: Pantheon saya! Saya salah membaca komentar Anda sebagai "memfasilitasi muntah". : - /
dr Hannibal Lecter
Di sini saya berdebat hanya untuk satu algoritma - Smith-Waterman (dan varian Needleman-Wunsch)
Aleksandr Levchuk
13

Siam menyebut berikut ini sebagai algoritma terpenting abad ke-20:

1946: Algoritma Metropolis untuk Monte Carlo . Melalui penggunaan proses acak, algoritma ini menawarkan cara yang efisien untuk menemukan jawaban atas masalah yang terlalu rumit untuk dipecahkan secara tepat.

1947: Metode Simpleks untuk Pemrograman Linier . Solusi elegan untuk masalah umum dalam perencanaan dan pengambilan keputusan.

1950: Metode Iterasi Subruang Krylov . Suatu teknik untuk dengan cepat menyelesaikan persamaan linear yang berlimpah dalam perhitungan ilmiah.

1951: Pendekatan Dekomposisi untuk Komputasi Matriks . Serangkaian teknik untuk aljabar linear numerik.

1957: Kompiler Pengoptimasi Fortran . Mengubah kode tingkat tinggi menjadi kode yang dapat dibaca komputer yang efisien.

1959: Algoritma QR untuk Komputasi Nilai Eigen . Operasi matriks penting lainnya dibuat cepat dan praktis.

1962: Algoritma Quicksort untuk Penyortiran . Untuk penanganan database besar secara efisien.

1965: Transformasi Fourier Cepat . Mungkin algoritma yang paling umum digunakan saat ini, memecah bentuk gelombang (seperti suara) menjadi komponen periodik.

1977: Deteksi Hubungan Integer . Metode cepat untuk menemukan persamaan sederhana yang dipenuhi oleh koleksi angka yang tampaknya tidak berhubungan.

1987: Metode Multipole Cepat . Sebuah terobosan dalam berurusan dengan kompleksitas perhitungan n-tubuh, diterapkan dalam masalah mulai dari mekanika langit hingga pelipatan protein.

Secara pribadi saya akan mengganti Deteksi Hubungan Integer dengan PageRank .

jason
sumber
1
Untuk daftar ini, saya akan menambahkan 2 buku, meskipun mereka lebih banyak tentang "teorema paling penting" abad ke-20: Lima Aturan Emas amazon.com/Five-Golden-Rules-20th-Century-Mathematics/dp/… , dan Lima Aturan Emas Lagi. amazon.com/Five-More-Golden-Rules-20th-Century/dp/0471395285
Tangurena
Teknik Monte Carlo masih digunakan, kurang lebih dalam bentuk aslinya. Ini juga berlaku untuk FFT dan Quicksort. Sebagian besar sisanya tidak saya kenal. Metode Simplex untuk LP tidak berskala sama sekali, dibandingkan dengan metode yang lebih modern.
David Thornley
9

PageRank, suka atau benci, tetapi ini memengaruhi keputusan dan tindakan jutaan orang di seluruh dunia yang menggunakan Google setiap hari.

Maksee
sumber
9

Jika saya harus membuat daftar 3 algoritma paling penting yang digunakan hari ini di komputer, saya akan mengatakan:

  1. Pencarian Biner
  2. Quicksort
  3. Algoritma Dijkstra

The Binary Search algoritma digunakan terus-menerus untuk mempersempit pada item dalam daftar diurutkan, sebagian besar indeks pencarian akan menggunakan sesuatu di sepanjang garis-garis ini di beberapa titik. Algoritma ini menyediakan pencarian daftar yang diurutkan dalam waktu (log n).

The Quicksort algoritma akhirnya berhasil mendapatkan semacam turun ke O (n log n) rata-rata kasus dan O (n ^ 2) kasus yang lebih buruk. Penyortiran adalah salah satu tugas data yang paling umum di komputer dan salah satu yang paling mahal, meningkatkan penyortiran kasus rata-rata adalah langkah besar dalam efisiensi.

Algoritma Dijkstra seperti telah dikatakan menghasilkan jalur terpendek antara titik-titik dalam grafik. Ini digunakan secara luas untuk semua jenis aplikasi perutean, yang paling luas berkenaan dengan internet itu sendiri memastikan bahwa jalur tercepat melalui web kusut router yang saling terhubung digunakan.

Orbling
sumber
Pencarian biner harus sangat, sangat tua ... Maksudku, itu dirumuskan 'di masa lalu' dan itu dalam 'dekade', tapi itu akan ada selama ratusan tahun.
Kirk Broadhurst
@Kirk Broadhurst: Tetap saja, ini adalah algoritma yang sangat penting untuk komputer. Terlepas dari kapan manusia pertama kali menyusunnya.
Orbling
8

Teorema Bayes

Ini mungkin berkontribusi paling besar untuk menjaga jumlah spam yang membuang waktu di kotak masuk saya ke tingkat yang dapat dikelola.

Tentu saja, saya telah digunakan di banyak aplikasi berharga lainnya, tetapi membunuh SPAM adalah favorit saya.

JohnFx
sumber
Saya akan memberi Anda acungan jempol, tetapi ini adalah teorema (salah satu yang terbaik) dan bukan algoritma. Namun banyak algoritma didasarkan pada teorema ini.
Amir Rezaei
Saya hanya mencoba untuk menggabungkan semuanya ke dalam kategori umum algoritma, tetapi secara teknis Anda benar.
JohnFx
@ AmirR Secara teknis benar, jenis terbaik yang benar!
Mark C
7

TimSort

Ini adalah algoritma pengurutan yang sekarang digunakan dalam Python , Java 7 dan Android

Pada dasarnya:

  • O (N log N) kasus terburuk (tidak merosot)
  • O (N) untuk daftar yang hampir diurutkan (sebenarnya N-1persis pada daftar yang sudah diurutkan)

Dan keindahannya? Itu stabil ! Dan oleh karena itu cocok untuk penyortiran multipass sesuai dengan berbagai kriteria.

Omong-omong, jika ada yang memiliki implementasi C ++ yang dioptimalkan di tangan ...

Matthieu M.
sumber
Tidak boleh Θ (NlogN), karena memiliki perilaku yang lebih baik pada daftar yang sudah diurutkan. O (NlogN) adalah notasi yang tepat di sini.
Donal Fellows
Meskipun ini bagus, saya pasti tidak akan menyebutnya "salah satu algoritma terbaik yang ditemukan dalam beberapa dekade terakhir". Mergesort, yang menjadi dasar Timsort, adalah pencapaian nyata.
Billy ONeal
6

Semua algoritma yang digunakan untuk menyelesaikan Masalah Visibilitas dalam Animasi Komputer 3D tampaknya penting bagi saya.

Algoritma Painter

Algoritma pelukis, juga dikenal sebagai isian prioritas, adalah salah satu solusi paling sederhana untuk masalah visibilitas dalam grafik komputer 3D. Saat memproyeksikan adegan 3D ke bidang 2D, pada titik tertentu perlu untuk memutuskan poligon mana yang terlihat, dan mana yang disembunyikan.

Z-buffering

Dalam grafik komputer, z-buffering adalah manajemen koordinat kedalaman gambar dalam grafik tiga dimensi (3-D), biasanya dilakukan dalam perangkat keras, kadang-kadang dalam perangkat lunak. Ini adalah salah satu solusi untuk masalah visibilitas, yang merupakan masalah menentukan elemen pemandangan yang diberikan yang terlihat, dan yang disembunyikan. Algoritma pelukis adalah solusi umum lain yang, meskipun kurang efisien, juga dapat menangani elemen adegan non-buram. Buffer-Z juga dikenal sebagai buffering dalam.

Penentuan permukaan yang tersembunyi

Dalam grafik komputer 3D, penentuan permukaan tersembunyi (juga dikenal sebagai penghapusan permukaan tersembunyi (HSR), oklusi culling (OC) atau penentuan permukaan yang terlihat (VSD) adalah proses yang digunakan untuk menentukan permukaan dan bagian permukaan mana yang tidak terlihat dari sudut pandang tertentu. Algoritma penentuan permukaan tersembunyi adalah solusi untuk masalah visibilitas, yang merupakan salah satu masalah utama pertama di bidang grafik komputer 3D. Proses penentuan permukaan tersembunyi kadang-kadang disebut bersembunyi, dan algoritma semacam itu kadang-kadang disebut penyembunyi. Analog untuk rendering garis adalah penghapusan garis tersembunyi, penentuan permukaan tersembunyi diperlukan untuk membuat gambar dengan benar, sehingga orang tidak dapat melihat melalui dinding dalam realitas virtual, misalnya.

Dane
sumber
3

Apapun yang Anda butuhkan untuk menyelesaikan masalah Anda saat ini.

mipadi
sumber
1
Itulah yang akan saya katakan. Sekarang saya tidak perlu mengatakannya.
Robert Harvey
Mana yang bukan jawaban yang bagus. Algoritma mana pun yang tidak signifikan bagi manusia.
Amir Rezaei
6
Ini bukan algoritma khusus dan bahkan jika itu mungkin tidak penting bagi umat manusia.
jason
3

Soundex adalah algoritma fonetik untuk mengindeks nama dengan suara.

sal
sumber
Bagaimana soundex berkontribusi pada umat manusia?
barjak
Ini meningkatkan kemampuan untuk menggunakan bahasa alami, mengoreksi perbedaan kecil dalam pengejaan dan pengucapan regional.
sal
3

Algoritma Viterbi

Awalnya digunakan untuk memecahkan kode kode koreksi kesalahan konvolusional, sekarang digunakan untuk memecahkan masalah pengenalan kelas yang luas (mulai dari pengenalan ucapan hingga bioinformatika). Anda dapat menemukannya di beberapa perangkat komunikasi dan penyimpanan.

Giacomo Verticale
sumber
Algoritma +1 Viterbi sangat penting. @ [Giacomo Verticale] mungkin Anda harus menyebutkan hubungannya dengan Hidden Markov Models (HMMs).
Aleksandr Levchuk
3

MP3

Meskipun ini adalah istilah yang lebih umum daripada algoritma tertentu, saya akan menyebut MP3 sebagai agregasi dari berbagai algoritma dan teknik yang bekerja sama untuk menghasilkan format audio yang hilang ini.

Sudah pasti sangat signifikan di "era digital".

Jens Hoffmann
sumber
3

Integrasi numerik Runge-Kutta . Tanpanya banyak simulasi tidak akan mungkin terjadi. Tidak ada program luar angkasa, tidak ada tenaga nuklir, tidak ada balistik, tidak ada simulasi olahraga, tidak ada rompi anti peluru, tidak ada simulasi uji tabrakan, tidak ada simulasi gerakan fluida, tidak ada simulasi interaksi kimia, tidak ada bangunan tahan gempa ... daftar berjalan.

Ja72
sumber
+1 @ j172 Saya tahu ini, sangat berguna dalam analisis numerik dan simulasi.
Amir Rezaei
2

Algoritma penyortiran.

tia
sumber
5
ini bukan algoritma yang spesifik, ...
Justin L.
Ya, apa kata Justin L., algoritma pengurutan mana?
dr Hannibal Lecter
"Algoritma spesifik" harus berupa mergesort, yang pertama dari jenis n lg n.
Billy ONeal
2
@dr Hannibal Lecter: Bubble Sort tentu saja. Yang lainnya adalah optimasi prematur.
peterchen
2

Quicksort

ysolik
sumber
1
Huek! Saya tentu berharap orang tidak menggunakan quicksort dalam kode produksi. Yang lebih penting, mergesort datang lebih awal dan hampir sama cepatnya. (Mudah-mudahan sebagian besar kode menggunakan beberapa varian pada Introsort)
Billy ONeal
2
@Billy ONeal, mengurutkan .NET adalah Quicksort. Jadi, setiap program yang memanggil Daftar <T> .Sort () menggunakan quicksort dalam produksi.
Steven Evers
@SnOrfus: Apakah Anda memiliki bukti pernyataan itu? Untuk pemahaman saya Daftar <t> .Sort didasarkan pada introsort.
Billy ONeal
3
@Billy ONeal: langsung dari
msdn
3
@ Thorbjørn: Ini masih bukan algoritma tujuan umum yang baik. Introsort adalah quicksort, tetapi beralih ke heap sort jika melampaui kedalaman rekursi yang diberikan. Ini memungkinkan seseorang untuk memiliki karakteristik quicksort yang baik tetapi selalu menghindari kasus patologis, bahkan jika algoritme memilih pivot yang buruk.
Billy ONeal
1

Penyisipan Sortir

Mudah diimplementasikan, sangat cepat pada daftar kecil dan digunakan dalam implementasi Merge Sort / Quicksort untuk mempercepatnya. Ini stabil, dan beroperasi di O (n) pada daftar yang diurutkan (ketika diurutkan dalam urutan menaik).

Oliver Weiler
sumber
1

Gauss-Jordan dalam perhitungan matriks

xport
sumber
1

Filter Kalman

Ini akan banyak digunakan dalam navigasi, pelacakan target (untuk hampir semua sensor: radar, sonar, FLIR, ladar). Satu buku teks menunjukkan aplikasi dalam pengontrol disk drive. Sistem kontrol robot sering menggunakan filter Kalman.

John R. Strohm
sumber
0

Bahasa lisan dan tulisan.

Mereka saat ini adalah salah satu algoritma yang paling efisien untuk mentransfer pengetahuan dari satu hal ke hal lainnya. Tanpa bahasa, masyarakat sipil tidak akan ada, dan informasi tidak dapat disampaikan.

Malfist
sumber
5
-1: Algoritma dapat diekspresikan menggunakan bahasa alami, tetapi bahasa alami bukan algoritma.
Steven Evers
2
Apakah Anda akan mengatakan algoritma kompresi bukan algoritma? Semua bahasa yang dilakukan adalah kompres informasi yang disampaikan dari sumber ke reseptis. Ini memiliki aturan khusus yang harus diikuti (tata bahasa) sama seperti algoritma lainnya, dan dibutuhkan input (pengalaman Anda) dan menghasilkan output (pengetahuan) yang berbeda. Saya gagal melihat bagaimana Anda tidak dapat menganggap bahasa sebagai algoritma.
Malfist
Gagal semua definisi standar algoritma di banyak bidang.
James Reinstate Monica Polk
0

The tumpukan struktur data dan algoritma yang terkait untuk konstruksi timbunan dan pemeliharaan.

Dan menunjukkan rasa hormat untuk quicksort. Bahkan jika itu tidak selalu menjadi pilihan, itu adalah salah satu algoritma mendasar dalam perkembangan historis ilmu komputer, dan merupakan kendaraan yang bagus untuk memahami rekursi dan analisis algoritma. Itu indah, dan ya, saya menyukainya.

James Reinstate Monica Polk
sumber
0

Algoritma pengindeksan seperti B-tree, B + -tree, indeks hash, indeks pohon biner dll. Untuk mengindeks sejumlah besar data.

xyz
sumber
0

MapReduce sebagai cara untuk membagi, menaklukkan, dan memparalelkan pemrosesan set data besar.

Jay Elston
sumber
-1

Algoritma Brute Force!

Banyak orang meremehkan algoritma brute force ini. Sebenarnya itu sebagian besar digunakan untuk menyelesaikan masalah yang tidak memiliki pola. Saya sangat menyukainya!

xport
sumber
5
Itu bukan algoritma. Ini semacam algoritma.
Adam Lear
Ini adalah metode untuk memecahkan enkripsi.
Amir Rezaei
Saya pikir ini juga dikategorikan sebagai algoritma. "Mulai dari x hingga kamu melakukan sesuatu." <--- algoritma benar?
xport
Algoritma adalah serangkaian langkah untuk menyelesaikan tugas tertentu . Itu tidak spesifik.
Anto
-5

Bubble Sort!

Bubble sort tidak seburuk Bogosort . Itu sebabnya saya memilih jenis Bubble.

xport
sumber
1
Tolong pertimbangkan untuk menyatakan mengapa algoritma ini penting dan penting, orang-orang tampaknya tidak setuju mengapa Bubble Sort mungkin penting dan penting.
Tamara Wijsman
5
Bahkan Barack Obama tahu bubble sort adalah cara yang salah .
Joey Adams
@ TomWij, @ Joey: lihat pembaruan saya.
xport