Geçtiğimiz yıllarda insanlık için önemli algoritmalar hangileri? [kapalı]


40

Hangi dünyadaki en önemli algoritmalar geçmiş yıllarda insanlığa en çok katkıda bulundu?

Bunun geliştiricinin bilmesi gereken genel bir bilgi olduğunu düşündüm.

Güncelleme:
Mümkünse, lütfen cevabı belirli bir programlama algoritmasına tutun .
En önemlilerinden oluşan bir liste, cevap başına sadece bir algoritma almak istiyorum.
Lütfen algoritmanın neden önemli ve önemli olduğunu belirtiniz ...


2
Kapandı çünkü (şimdiye kadar) dört kişi “gerçek bir soru değil” diye düşünüyor, çünkü muhtemelen izolasyonda önemli bir programlama algoritmasının ne olduğu hakkında hiçbir fikrimiz yok.
David Thornley

2
Konu dışı olabilir, ancak gerçek bir soru.
Jeremy

1
+1 Güzel soru. Ben cstheory.stackexchange.com bu yeniden istemenizi öneririz
Aleksandr Levchuk

1
Neden kendi sorularına cevap veriyorsun? Birkaç defa?

2
Hatalı cevap yok + sınırsız cevap sayısı + "cevap başına bir tane" isteyen basit bir yorum + yazar kendi cevaplarından birkaçını gönderiyor = yapıcı olmayan bir soru için ders kitabı örneği. Biliyorum eski, ama lütfen bunu kapatalım.
Aaron,

Yanıtlar:


59

Genel / özel anahtar şifreleme oldukça önemli. İnternet ticareti, onsuz her yerde olmazdı.


4
+1 ve cevabınızı eklemek için, RSA.
sange

Kriptografik kodların (RSA gibi) pratik çözümlere dönüştürülmesiyle ilgili bir dizi algoritma ve en iyi uygulamalar vardır.
Donal Fellows

37

Dijkstra'nın algoritması

Algoritma , bir ağdaki iki düğüm arasındaki en iyi rotayı tanımlamak için dünyadaki her yönlendiricide bulunur .


Emin misiniz? Yönlendiricilerin çoğu, IP numarasının kendisine ait olduğunu ve yerel ağdaki makineye yönlendirdiğini veya daha iyi bilen bir yönlendirici (varsayılan yönlendirici - bu durumda paketin bu yönlendiriciye gittiğini) bilir. Büyük yönlendiriciler, IP adres aralığı X1-Y1 için paketin R1 yönlendiricisine gitmesi gerektiğini, X2-Y2 aralığı için paketin yönlendirici R2'ye vb. Gitmesi gerektiğini bilir. Bu konuda Dijkstras algoritması yoktur.

2
@ Thorbjørn Ravn Andersen: Ancak yönlendiricinin bu bilgiyi bilmesi için bir noktada birinin Dijkstra algoritmasını kullanması gerekecekti. Evet, aslında her bir paketi tek tek yönlendirmek için kullanılmaz, ancak büyük ağlardaki yönlendirme tablolarını belirlemede kullanılır. +1.
Billy ONeal,

@Billy, Dijkstra algoritmasının gerçekte ve kimin tarafından kullanıldığını tam olarak nerede beklersiniz?

@ Thorbjørn Ravn Andersen: Anladığım kadarıyla küçük ağlar için doğru rotaları seçmenin temeli olan OSPF'de rol oynuyor. Daha büyük ağlar arasındaki bağlantılar, daha fazla politikaya dayalı BGP kullanır. BGP'nin Dijkstra'nın algoritmasını kullanıp kullanmadığından emin değilim.
Billy ONeal

3
@Billy, ancak benim itirazım " dünyadaki HER yönlendirici var " idi. Bu - bence - açıkça yanlış.

30

Hızlı Fourier dönüşümü (FFT)

FFT, örneklenmiş sinyallerden faydalı bilgilerin çıkarılmasında oldukça önemli ve yaygın olarak kullanılan bir yöntemdir .

Hızlı bir Fourier dönüşümü (FFT), ayrık Fourier dönüşümünü (DFT) ve bunun tersini hesaplamak için etkili bir algoritmadır.


4
Bir zamanlar, PDP-11 için bir dizi FFT işlevi yazan bir patronum vardı. Popular Science'ın arkasındaki bir reklamla bu işlevlere sahip bir delikli zımba teli sattı ve oldukça ciddi bir banka yaptı. Açıkçası, sinyal işlemeden borsa tahminine kadar her şey için kodunu kullanan insanlar vardı.
Dan Ray,

26

PageRank

PageRank, World Wide Web gibi köprülenmiş bir belge kümesinin her bir öğesine, bağını "ölçmek" amacıyla, sayısal bir ağırlık atanan Google Internet arama motoru tarafından kullanılan, Larry Page adlı bir bağlantı analizi algoritmasıdır. küme içindeki önemi.


haha, bizim cevaplar sadece 2 saniye arayla :), üzgün olduklarını
Maksee

hiç sorun değil! :)
Amir Rezaei

36
Larry Page ismini aldığını asla anlamadım. Her zaman adın Web Pages ile bir ilgisi olduğunu varsaydım.
JohnFx

1
@ JohnFx Whoa, şaka yok!
Mark

+1: fakat eğer asıl algoritma insanca bilinip bilinmediğini gösterebilir mi? (IIRC wikipedia'nın bir yaklaşımdır)
Steven Evers

22

Veri sıkıştırma algoritmaları

Bilgisayar bilimi ve bilgi teorisinde, veri sıkıştırma veya kaynak kodlama, belirli kodlama şemaları kullanılarak, kodlanmamış bir gösterimin kullandığından daha az bit (veya başka bilgi taşıyan birimler) kullanan bilgiyi kodlama işlemidir.


2
Aynen ve temel sıkıştırma algoritmasının LZW'nin yazılım mühendisliğinde en güzel algoritmalardan biri olarak kabul edilebileceğini düşünüyorum.
mojuba,

"mümkünse belirli algoritmanın adını ver"

14

Smith-Waterman (ve Needleman-Wunsch)

Bu çok fazla getirilmiş olabilir, lütfen yorum yapın.

Smith-Waterman: Sıra Hizalama Algoritması

Bu örneklerden birinin, Smith-Waterman ve Needleman-Wunsch algoritmaları ve yaklaşımları olduğunu düşünüyorum. Hepsi aslında aynı şeyi yapıyorlar: onlar hizaya iki veya daha fazla dizeleri (dizileri) . Biyolojide bir önemi var. DNA veya Protein sekansları hizalandığında - yapısal, işlevsel ve evrimsel benzerlik bölgeleri ortaya çıkar.

Smith-Waterman'ın soyundan gelen BLAST

Smith-Waterman'a yaklaşan bir buluşsal yöntem BLAST. Biyolojik benzerlik için büyük veritabanlarının dizilerinin aranmasına izin verir. BLAST'ın popülaritesi gerçekten harika - büyük olasılıkla Biyolojide en yaygın kullanılan algoritma. Biyoinformatik ve Genomik'teki yeni alanlar, BLAST'tan daha doğru olan Smith-Waterman / Needleman-Wunsch algoritmalarına göre daha yeni ve daha iyi yaklaşımlara sahiptir.

Smith-Waterman'ın soyundan genom topluluğu

BLAST'den daha hızlı olan Smith-Waterman ve Needleman-Wunsch'un yüksek verimli yaklaşımları Genomları av tüfeği dizilemesinden toplamak için kullanılır - burada dizileyici makinesinin ürünü büyük miktarda DNA ise Genom'un rastgele parçalarından okunan (milyarlarca) çok kısa (50 ila 100 nükleotit). Yaklaşım İnsan Genom Projesini tamamlamak için kullanıldı. Tüm modern sıralama bu şekilde yapılır.

Çoklu Sıra Hizalaması Smith-Waterman'ın bir uzantısı

Çok Sayıda Çok Sıralı Hizalama algoritması var - bunlar Smith-Waterman / Needleman-Wunsch'un çok dizili bir versiyonuna yaklaşıyor. Çoklu diziler birbirleriyle aynı anda grup halinde hizalanır. İkili karşılığı olduğundan çok daha zor bir problem, ancak çözümler ilgili dizilerin Biyolojik fonksiyonu, yapısı ve evrimsel tarihi hakkında çok daha fazla fikir veriyor.


Merhaba ve Programcılara Hoşgeldiniz! Bu cevabı, oylamayı ve sıralamayı kolaylaştırmak için bu gibi soruları listelemek için alışılmış olduğu şekilde burada sunacağınız algoritmaların her biri için ayrı ayrı isteyebilirsiniz.
Yi Jiang

@ Yi Jiang: Benim panteonum! Yorumunuzu "kusmayı kolaylaştırmak" olarak yanlış anladım. : - /
dr Hannibal Lecter

Burada sadece bir algoritma savunuyorum - Smith-Waterman (ve değişken Needleman-Wunsch)
Aleksandr Levchuk

13

Siam, 20. yüzyılın en önemli algoritmaları olarak şunları adlandırdı:

1946: Monte Carlo için Metropolis Algoritması . Rastgele işlemlerin kullanılmasıyla, bu algoritma, tam olarak çözmek için çok karmaşık olan sorunlara cevap verebilmek için etkili bir yol sunar.

1947: Doğrusal Programlamanın Simpleks Yöntemi . Planlama ve karar almada ortak bir soruna zarif bir çözüm.

1950: Krylov Alt Uzay İterasyon Yöntemi . Bilimsel hesaplamada bol olan lineer denklemleri hızlıca çözmek için bir teknik.

1951: Matris Hesaplamalarına Ayrıştırma Yaklaşımı . Sayısal doğrusal cebir için bir teknikler takımı.

1957: Fortran Optimizasyon Derleyicisi . Üst düzey kodu verimli bilgisayar tarafından okunabilen koda dönüştürür.

1959: Özdeğerlerin Hesaplanması için QR Algoritması . Bir diğer önemli matris işlemi hızlı ve pratik hale getirildi.

1962: Sıralama için Quicksort Algoritmaları . Büyük veritabanlarının verimli kullanımı için.

1965: Hızlı Fourier Dönüşümü . Belki bugün kullanılan en yaygın algoritma, dalga formlarını (ses gibi) periyodik bileşenlere ayırır.

1977: Tamsayılı İlişki Tespiti . İlgisiz görünen sayıların koleksiyonları ile tatmin edilen basit denklemleri bulmak için hızlı bir yöntem.

1987: Hızlı Multipole Yöntemi . Gök mekaniğinden protein katlanmasına kadar uzanan problemlerde uygulanan n-vücut hesaplamalarının karmaşıklığı ile ilgili bir atılım.

Şahsen Tamsayı İlişkisi Tespiti'ni PageRank ile değiştirirdim .


1
Bu listede için, ben daha 20. yüzyılın "en önemli teoremler" hakkında olmasına rağmen, 2 kitap eklersiniz: Beş Altın Kural amazon.com/Five-Golden-Rules-20th-Century-Mathematics/dp/... ve Beş Daha Fazla Altın Kuralı. amazon.com/Five-More-Golden-Rules-20th-Century/dp/0471395285
Tangurena

Monte Carlo teknikleri hala orijinal formunda az ya da çok kullanılmaktadır. Bu aynı zamanda FFT ve Quicksort için de geçerlidir. Diğerlerinin çoğu ben aşina değilim. LP için Simplex yöntemi, daha modern yöntemlerle karşılaştırıldığında hiç iyi ölçeklenmiyor.
David Thornley

9

PageRank, onu sev ya da nefret et, ancak günlük olarak dünya çapında googling yapan milyonlarca insanın kararlarını ve eylemlerini etkiliyor.


9

Bugün bilgisayarlarda kullanılan en önemli 3 algoritmayı listelemek zorunda kalırsam şöyle derdim:

  1. Ikili arama
  2. Hızlı sıralama
  3. Dijkstra'nın algoritması

İkili Arama algoritması sıralı liste içinde bir öğenin üzerine daraltmak için sürekli kullanılan, en endeks aramaları bir noktada bu satırlar boyunca bir şey kullanacaktır. Bu algoritma, sıralı bir listenin o (log n) zamanında aranmasını sağlar.

Quicksort algoritması nihayet (n ^ 2) kötü durum ortalama vaka ve O O kadar sıralama eğil (n log) başardı. Sıralama, bilgisayardaki en yaygın veri görevlerinden biridir ve en pahalılardan biridir, ortalama vaka sıralamasının iyileştirilmesi verimlilikte atılmış büyük bir adımdı.

Dijkstra'nın söylendiği gibi algoritması , bir grafik içindeki noktalar arasında en kısa yolu üretir. Bu, her yönlendirme uygulaması için yaygın olarak kullanılır, en çok internetin kendisiyle bağlantılı olarak, birbirine bağlı yönlendiricilerin karışık ağından en hızlı yolun kullanılmasını sağlar.


İkili arama çok, çok eski olmalıydı ... Demek istediğim, “geçmişte” formüle edildi ve “on yıl” içindeydi, ancak yüzlerce yıl civarında olacaktı.
Kirk Broadhurst

@Kirk Broadhurst: Yine de, bilgisayarlar için inanılmaz derecede önemli bir algoritma. Bir insan ilk ne zaman gebe kalsa da.
Orbling

8

Bayes teoremi

Gelen kutumdaki zaman kaybına neden olan spam miktarını yönetilebilir bir düzeyde tutmaya en çok katkıda bulunmuş olabilir.

Tabii ki, çok sayıda diğer değerli uygulamalarda da kullanılıyor, ancak SPAM öldürme en sevdiğim şey.


Size başparmak veririm ama bu bir teorem (en iyilerden biri) ve bir algoritma değil. Ancak birçok algoritma bu teoriye dayanmaktadır.
Amir Rezaei

Sadece hepsini genel bir algoritma kategorisine sokmaya çalışıyordum, ama teknik olarak haklısın.
JohnFx

@AmirR Teknik olarak doğru, en doğru tür!
Mark C,

7

TimSort

Bu şimdi Python , Java 7 ve Android'de kullanılan sıralama algoritmasıdır.

Temelde:

  • O (N log N) en kötü durum (dejenere değil)
  • O (N) neredeyse sıralanan liste için (aslında N-1zaten sıralanan listede)

Ve bunun güzelliği? Bu var kararlı ! Ve bu nedenle, çeşitli kriterlere göre çok yollu sıralama için uygundur.

Bu arada, eğer birinin elinde optimize edilmiş bir C ++ uygulaması varsa ...


Zaten sıralı bir listede daha iyi bir davranışa sahip olduğundan, Θ (NlogN) olamaz. O (NlogN) burada doğru gösterimdir.
Donal Fellows

Bu hoş olsa da, kesinlikle "geçmiş yıllarda icat edilen en büyük algoritmalardan biri" demezdim. Timsort'un dayandığı Mergesort, gerçek başarıdır.
Billy ONeal

6

3B Bilgisayar Animasyonunda Görünürlük Problemini çözmek için kullanılan tüm algoritmalar benim için çok önemli görünüyor.

Ressamın algoritması

Ressamın öncelikli dolgu olarak da bilinen algoritması, 3B bilgisayar grafiğindeki görünürlük probleminin en basit çözümlerinden biridir. Bir 3B sahneyi bir 2B düzlem üzerine yansıtırken, hangi noktada hangi poligonun görünür olduğuna ve hangilerinin gizlendiğine karar vermek gerekir.

Z tamponlama

Bilgisayar grafiğinde, z tamponlama genellikle donanımda, bazen yazılımda yapılan üç boyutlu (3-D) grafiklerdeki görüntü derinlik koordinatlarının yönetimidir. Görünürlük sorununa bir çözümdür; bu, işlenen sahnenin hangi öğelerinin görünür ve hangilerinin gizli olduğuna karar verme sorunudur. Ressamın algoritması, daha az verimli olmakla birlikte opak olmayan sahne öğelerini de kaldırabilen başka bir ortak çözümdür. Z-tamponlama ayrıca derinlik tamponlama olarak da bilinir.

Gizli yüzey belirleme

3D bilgisayar grafiklerinde, gizli yüzey belirleme (gizli yüzey çıkarma (HSR), oklüzyon temizleme (OC) veya görünür yüzey belirleme (VSD) olarak da bilinir), hangi yüzeylerin ve yüzeylerin belirli bir açıdan görünmeyeceğini belirlemek için kullanılan işlemdir Gizli bir yüzey belirleme algoritması, 3D bilgisayar grafikleri alanındaki ilk büyük sorunlardan biri olan görünürlük sorununa bir çözümdür Gizli yüzey belirleme işlemine bazen gizleme denir ve bu tür bir algoritmaya bazen gizleyici denir Çizgi oluşturma işleminin analogu gizli çizgi kaldırmadır .. Bir görüntüyü doğru şekilde oluşturmak için gizli yüzey belirleme gereklidir, böylece bir kişi sanal gerçeklikte duvarlara bakamaz.


3

Mevcut probleminizi çözmek için hangisine ihtiyacınız varsa.


1
Ben de öyle diyecektim. Şimdi bunu söylemek zorunda değilim.
Robert Harvey,

Hangisi iyi bir cevap değil. Hangi algoritmalar insanlık için önemli değil.
Amir Rezaei

6
Bu belirli bir algoritma değildir ve olsa bile insanlık için önemli değildir.
Jason

3

Soundex , isimleri sesle indekslemek için kullanılan fonetik bir algoritmadır.


Soundex insanlığa nasıl katkıda bulundu?
Barjak

Yazım ve bölgesel telaffuzdaki küçük farklılıkları düzeltmek için doğal dil kullanma yeteneğini geliştirdi.
Sal

3

Viterbi algoritması

Başlangıçta evrişimli hata düzeltme kodlarının kodunu çözmek için kullanılır, şimdi geniş bir tanıma problemi sınıfını çözmek için kullanılır (konuşma tanımadan biyoinformatiğe kadar). Birkaç iletişim ve depolama aygıtında bulabilirsiniz.


+1 Viterbi algoritması çok önemlidir. @ [Giacomo Verticale] belki de bunun Gizli Markov Modelleri (HMM) ile ilişkisinden bahsetmelisiniz.
Aleksandr Levchuk

3

MP3

Her ne kadar belirli bir algoritmadan daha genel bir terim olsa da, MP3'ü bu kayıp ses formatını oluşturmak için işbirliği içinde çalışan farklı algoritmaların ve tekniklerin bir araya getirilmesi olarak adlandırırdım.

"Dijital çağda" kesinlikle çok önemli olmuştur.


3

Runge-Kutta sayısal entegrasyonu. Bu olmadan birçok simülasyon mümkün olmazdı. Uzay programı yok, nükleer enerji yok, balistik yok, spor simülasyonu yok, kurşun geçirmez yelek yok, çarpışma testi simülasyonu yok, sıvı hareketi simülasyonu yok, kimyasal etkileşim simülasyonu yok, depreme dayanıklı binalar yok ... liste devam ediyor.


+1 @ j172 Bunu biliyorum, sayısal analizlerde ve simülasyonlarda gerçekten faydalıdır.
Amir Rezaei

2

Sıralama algoritması.


5
Bu, belirli bir algoritma değil, ama ...
Justin L.

Evet, Justin L. ne dedi, hangi sıralama algoritması?
dr Hannibal Lecter

"Özel algoritma", n lg n türlerinden ilki olan mergesort olmalıdır.
Billy ONeal

2
@dr Hannibal Lecter: Kabarcık Tabii ki. Geriye kalan her şey erken optimizasyon.
Peterchen,

2

1
Yuck! Umarım insanlar üretim kodunda quicksort kullanmıyorlardır. Daha da önemlisi mergesort daha erken geldi ve neredeyse aynı hızda. (Umarım çoğu kod Introsort'ta bazı değişkenler kullanır)
Billy ONeal

2
@Billy ONeal, .NET'te sıralamanın tümü Quicksort'tur. Bu nedenle, List <T> .Sort () öğesini çağıran herhangi bir program, üretimde quicksort kullanır.
Steven Evers

@SnOrfus: Bu ifadenin kanıtı var mı? Anladığım kadarıyla List <t> .Sort introsort üzerine kuruludur.
Billy ONeal,

3
@Billy ONeal: doğrudan msdn'den - msdn.microsoft.com/en-us/library/b0zbh7b6.aspx
ysolik

3
@ Thorbjørn: Hala iyi bir genel amaçlı algoritma değil. İçgözlemle sıralama olduğunu quicksort, ama buna verilen bir tekrarlama derinliğiyle ötesine giderse sıralama yığın geçer. Bu, kişinin quicksort'un iyi özelliklerine sahip olmasına izin verir, ancak algoritma kötü pivotlar seçse bile, patolojik durumlardan her zaman kaçınır.
Billy ONeal

1

Ekleme Sıralaması

Uygulaması kolaydır, küçük listelerde çok hızlıdır ve Birleştirme Sıralama / Hızlı Uygulama uygulamalarında bunları hızlandırmak için kullanılır. Kararlı ve sıralı listelerde (artan düzende sıralandığında) O (n) olarak çalışır.



1

Kalman Filtresi

Navigasyon, hedef takibinde yoğun olarak kullanılır (neredeyse her sensör için: radar, sonar, FLIR, ladar). Bir ders kitabı bir disk sürücü denetleyicisinde bir uygulamayı gösterir. Robotik kontrol sistemleri sıklıkla Kalman filtreleri kullanır.


0

Sözlü ve Yazılı dil.

Şu anda bilgiyi bir şeyden diğerine aktarmak için en etkili algoritmadan biri. Dil olmadan sivil toplum var olamazdı ve bilgi aktarılamazdı.


5
-1: Algoritmalar doğal dil kullanılarak ifade edilebilir, ancak doğal diller algoritmalar değildir.
Steven Evers

2
Sıkıştırma algoritmalarının algoritma olmadığını söyleyebilir misiniz? Bütün diller bir kaynaktan bir alıcıya aktarılan bilgileri sıkıştırır. Tıpkı diğer algoritmalar gibi izlenmesi gereken (gramer) belirli kuralları vardır ve bir girdi (deneyimleriniz) alır ve farklı bir çıktı (bilgi) üretir. Dili bir algoritma olarak nasıl düşünemediğinizi göremiyorum.
Malfist

Algoritmanın tüm standart tanımlarını pek çok cephede bozmaktadır.
James, Monica Polk’i

0

Yığın veri yapısı ve yığın inşaat ve bakım için ilişkili algoritmaları.

Ve quicksort için biraz saygı gösterin. Her zaman bir seçim şekli olmasa bile, bilgisayar biliminin tarihsel gelişiminde temel algoritmalardan biridir ve özyineleme ve algoritma analizini anlamak için mükemmel bir araçtır. Çok güzel ve evet, onu seviyorum.


0

B-tree, B + -tree, hash index, binary tree index gibi indeksleme algoritmaları Büyük miktarda veriyi indekslemek için.


0

MapReduce, büyük veri kümelerinin işlenmesini bölmenin, fethetmenin ve paralelleştirmenin bir yolu olarak.


-1

Brute Force Algoritması!

Birçok kişi bu kaba kuvvet algoritmasını küçümsüyor. Aslında daha çok deseni olmayan problemleri çözmek için kullanılır. Onu çok seviyorum!


5
Bu bir algoritma değil. Bir çeşit algoritma.
Adam Lear

Şifrelemeyi kırmanın bir yöntemi.
Amir Rezaei

Aynı zamanda bir algoritma olarak da kategorize edildiğini düşünüyorum. "X ile y arasında bir şeyler yap." <--- algoritma doğru mu?
xport

Bir algoritma, belirli bir görevi başarmak için bir dizi adımdır . Bu belirli değil.
Anto

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.