Dağıtılmış çekirdek algoritmaları


307

Algoritmaların önemini göstermek için (örneğin teoriyi yapmayan ve hatta tamamen farklı alanlardan gelen öğrenciler ve profesörler için), bazen, temel algoritmaların ticari, devlette uygulandığı örneklerin bir listesini hazır bulundurmak yararlı olabilir. veya yaygın olarak kullanılan yazılım / donanım.

Aşağıdaki kriterleri karşılayan örnekler arıyorum:

  1. Algoritmayı kullanan yazılım / donanım şu anda geniş kullanımda olmalıdır.

  2. Örnek belirli olmalı. Lütfen belirli bir sisteme ve belirli bir algoritmaya referans verin.
    Örneğin, "algoritma X, görüntü işleme için faydalıdır" ifadesinde "görüntü işleme" terimi yeterince spesifik değildir; "Google aramada grafik algoritmaları kullanılıyor" ifadesinde "grafik algoritmaları" terimi yeterli değildir.

  3. Algoritma tipik lisans veya doktora programlarında öğretilmelidir. algoritmalarda veya veri yapılarında sınıflar. İdeal olarak, algoritma tipik algoritmalar ders kitaplarında ele alınmaktadır. Örneğin, "tanınmış sistem X az bilinen algoritma kullanır Y" iyi değil.


Güncelleme:

Harika cevaplar ve bağlantılar için tekrar teşekkürler! Bazı insanlar kriterleri yerine getirmenin zor olduğunu söylüyorlar çünkü çekirdek algoritmalar belirli bir kullanımın belirtilmesi zorlaştı. Zorluğu görüyorum. Ama bence belirli örnekler bulmanın faydası var, çünkü insanlara şunu söylüyor: “Bak, algoritmalar önemlidir çünkü onlar hemen hemen her yerdeler !” çalışmıyor.


Yorumlar uzun tartışmalar için değildir; bu konuşma sohbete taşındı .
Bjørn Kjos-Hanssen

Yanıtlar:


473

Bir sistemin arkasındaki ana itici olan algoritmalar, bence, algoritma içermeyen derslerde aynı sebeple bulmaları daha kolay, aynı zamanda hemen uygulamalı teoremler, uygulamalı matematikte saf matematik derslerinden ziyade daha kolay. Pratik bir problemin derste soyut problemin tam yapısına sahip olması nadirdir. Tartışmalı olmak için, şık algoritmaların Strassen'in çarpımı, AKS primallik testi veya Moser-Tardos algoritması gibi materyalleri kullanması için bir neden göremiyorum, video veritabanı uygulaması, optimize edici bir derleyici, işletim sistemi için düşük seviyeli pratik problemlerle ilgili bir ağ tıkanıklığı kontrol sistemi veya başka bir sistem. Bu derslerin değeri, verimli çözümler bulmak için bir sorunun yapısından yararlanmanın karmaşık yollarının olduğunu öğrenmektir. Gelişmiş algoritmalar, aynı zamanda analizi önemsiz olmayan basit algoritmalarla tanıştığı yerdir. Bu sebeple basit randomize algoritmaları veya PageRank'i reddetmem.

Herhangi bir büyük yazılım parçasını seçebileceğinizi ve içinde uygulanan temel ve gelişmiş algoritmaları bulabileceğinizi düşünüyorum. Bir örnek çalışma olarak, bunu Linux çekirdeği için yaptım ve Chromium'dan birkaç örnek gösterdim.

Linux çekirdeğinde temel veri yapıları ve algoritmalar

Linkler github'daki kaynak koduna verilmiştir .

  1. Bağlantılı liste , iki kat bağlantılı liste , kilitlenmeyen bağlantı listesi .
  2. B + Ağaçlar , ders kitaplarında neleri bulamadığınızı size söyleyerek yorumluyor.

    Nispeten basit bir B + Tree uygulaması. B + Ağaçlarının nasıl çalıştığını anlamak için bir öğrenme alıştırması olarak yazdım. Yararlı olduğu da ortaya çıktı.

    ...

    Ders kitaplarında yaygın olarak bulunmayan bir numara kullanıldı. En düşük değerler sola değil sağa doğrudur. Bir düğümde kullanılan tüm yuvalar soldadır, kullanılmayan tüm yuvalar NUL değerleri içerir. Çoğu işlem, tüm yuvalara bir kez döngü yapar ve ilk NUL'da sona erer.

  3. Muteksler , sürücüler vb. İçin kullanılan öncelikli sıralama listeleri

  4. Kırmızı-Siyah ağaçlar vardır kullanılan vb dosya tanımlayıcıları ve dizin girişlerini izlemek için, planlama, sanal bellek yönetimi için.
  5. Aralık ağaçları
  6. Radix ağaçları , bellek yönetimi , NFS ile ilgili aramalar ve ağ ile ilgili işlevler için kullanılır.

    Sayı tabanı ağacının yaygın bir kullanımı, sayfa oluşturmak için işaretçileri saklamaktır;

  7. Kelimenin tam anlamıyla öncelikli yığın olan kontrol grubu sisteminde kullanılan bir ders kitabı uygulaması .

    CLR, bölüm 7'ye göre işaretçiler içeren, yalnızca basit yerleştirme statik boyutlu öncelikli öbek

  8. Hash , Knuth'a ve bir kağıda referansla işlev görür .

    Knuth, çarpma hashası için bir makine kelimesi tarafından temsil edilebilecek maksimum tam sayıya yaklaşık altın oranda primerleri önerir. Chuck Lever, bu tekniğin etkinliğini doğruladı:

    http://www.citi.umich.edu/techreports/reports/citi-tr-00-1.pdf

    Bu primerler bit-seyrek olarak seçilmiştir, yani bunlar üzerindeki işlemler, çarpma işleminin yavaş olduğu makineler için çarpma işlemleri yerine vardiya ve toplama işlemlerini kullanabilir.

  9. Kodun bu sürücü gibi bazı kısımları kendi karma fonksiyonunu yerine getirir.

    Dönen Bir Karma algoritması kullanarak karma işlevi

    Knuth, D. Bilgisayar Programlama Sanatı, Cilt 3: Sıralama ve Arama, Bölüm 6.4. Addison Wesley, 1973

  10. İnodes , dosya sistemi bütünlük kontrolleri vb. Uygulamak için kullanılan karma tablolar .
  11. Bit diziler vb bayrakları, kesmeleri, başa çıkmak için kullanılır ve Knuth Vol yer veriliyor. 4.

  12. Semafor ve sıkma kilitleri

  13. İkili arama için kullanılan kesme taşıma , önbellek araması kayıt vb

  14. B-ağaçları ile ikili arama

  15. Dizin yapılandırmasında kullanılan ilk arama derinliği ve değişkeni .

    Start_handle tarafından belirtilen düğümde başlayan (ve biten), ad alanı ağacının değiştirilmiş bir derinlik-ilk yürüyüşünü gerçekleştirir. Type parametresiyle eşleşen bir düğüm bulunduğunda geri çağırma işlevi çağrılır. Geri çağırma işlevi sıfır olmayan bir değer döndürürse, arama derhal sonlandırılır ve bu değer arayan kişiye döndürülür.

  16. Genişlik ilk arama , çalışma zamanında kilitlemenin doğruluğunu kontrol etmek için kullanılır.

  17. Bağlantılı listelerdeki birleştirme sıralaması çöp toplama , dosya sistemi yönetimi vb. İçin kullanılır.

  18. Kabarcık sıralama da şaşırtıcı bir şekilde sürücü kütüphanesinde uygulanmaktadır.

  19. Knuth-Morris-Pratt string eşleşmesi ,

    Knuth, Morris ve Pratt [1] nedeniyle doğrusal zaman dizgisi eşleme algoritmasını uygular. Algoritmaları, DELTA geçiş fonksiyonunun açıkça hesaplanmasını önler. Eşleşme süresi, n (uzunluk) (metin) için, sadece bir yardımcı fonksiyon (PI [1..m]) kullanarak, uzunluk (model) için, O (m) zamanındaki modelden önceden hesaplanan, bir yardımcı fonksiyon (PI [1..m]) kullanılarak O (n) 'dir. PI dizisi, DELTA geçiş fonksiyonunun gerektiği gibi "anında" verimli bir şekilde hesaplanmasını sağlar. Kabaca konuşmak gerekirse, herhangi bir durum için "q" = 0,1, ..., m ve SIGMA'daki "a" karakterleri için, PI ["q"] değeri "a" dan bağımsız olan ve DELTA hesapla ("q", "a") 2. PI dizisinde sadece m giriş olduğu için DELTA'da O (m | SIGMA |) girişleri olduğundan, bir | SIGMA | ön işleme zamanında DELTA yerine PI hesaplayarak.

    [1] Cormen, Leiserson, Rivest, Stein Algoritmalarına Giriş, 2. Baskı, MIT Basını

    [2] Sonlu otomasyon teorisine bakınız.

  20. Boyer-Moore modeli , alternatifin ne zaman tercih edileceğine dair referanslar ve önerilerle eşleşiyor .

    Boyer-Moore string eşleştirme algoritmasını uygular:

    [1] Hızlı Dize Arama Algoritması, RS Boyer ve Moore. Bilişim Makinaları Birliği İletişim, 20 (10), 1977, s. 762-772. http://www.cs.utexas.edu/users/moore/publications/fstrpos.pdf

    [2] Tam Dize Eşleştirme Algoritmalarının El Kitabı, Thierry Lecroq, 2004 http://www-igm.univ-mlv.fr/~lecroq/string/string.pdf

    Not: Boyer-Moore (BM) sağdan sola doğru eşleşme aramaları gerçekleştirdiğinden, bir eşleşmenin birden fazla bloğa yayılması hala mümkündür, bu durumda bu algoritma herhangi bir tesadüf bulamaz.

    Böyle bir şeyin gerçekleşmeyeceğinden emin olmak istiyorsanız, bunun yerine Knuth-Pratt-Morris (KMP) uygulamasını kullanın. Sonuç olarak, ayarınıza bağlı olarak uygun dize arama algoritmasını seçin.

    Metin arama altyapısını filtreleme, NIDS veya
    benzeri güvenlik odaklı bir amaç için kullandığınızı ve ardından KMP'ye gittiğinizi söyleyin . Aksi takdirde, performansı gerçekten önemsiyorsanız, Servis Kalitesi (QoS) politikalarını uygulamak için paketleri sınıflandırdığınızı ve birden fazla parçaya yayılmış olası eşleşmelerin sakıncası olmadığını söyleyin, ardından BM'ye gidin.

Chromium Web Tarayıcısında Veri Yapıları ve Algoritmalar

Bağlantılar Google kodundaki kaynak koduna . Sadece birkaçını listeleyeceğim. En sevdiğiniz algoritmayı veya veri yapınızı aramak için arama özelliğini kullanmanızı öneririm.

  1. Şev verme, ağaçlar .

    Ağaç ayrıca bir tahsis politikası (Allocator) ile de parametreleştirilmiştir. Politika, C ücretsiz mağazasında veya bölgedeki listeleri ayırmak için kullanılır; zone.h bakın

  2. Voronoi diyagramları bir demoda kullanılır.
  3. Bresenham algoritmasına göre sekme oluşturma .
Chromium kodunda yer alan üçüncü taraf kodunda bu tür veri yapıları ve algoritmalar da vardır.

  1. İkili ağaçlar
  2. Kırmızı-Siyah ağaçlar

    Julian Walker'ın Sonuçlanması

    Kırmızı siyah ağaçlar ilginç hayvanlar. AVL ağaçlarından (doğrudan rakipleri) daha basit olduklarına inanılıyor ve ilk bakışta durum böyle görünüyor, çünkü yerleştirme bir esinti. Ancak, biri silme algoritması ile oynamaya başladığında, kırmızı siyah ağaçlar çok zorlaşır. Bununla birlikte, bu ilave karmaşıklığın karşı ağırlığı, hem ekleme hem de silme işleminin tek bir geçmeli yukarıdan aşağı algoritması kullanılarak gerçekleştirilebilmesidir. Bu, sadece ekleme algoritmasının yukarıdan aşağıya yazılabildiği AVL ağaçları için geçerli değildir. AVL ağacından silme, aşağıdan yukarıya bir algoritma gerektirir.

    ...

    Kırmızı siyah ağaçlar, kaprisli bir isme sahip çoğu veri yapısı gibi popülerdir. Örneğin, Java ve C ++ 'da kütüphane haritası yapıları tipik olarak kırmızı siyah bir ağaçla uygulanır. Kırmızı siyah ağaçlar da AVL ağaçlarıyla aynı hızdadır. Denge o kadar iyi olmasa da, dengeyi korumak için harcanan iş genellikle kırmızı siyah bir ağaçta daha iyidir. Etrafta yüzen birkaç yanlış anlama vardır, ancak çoğunlukla kırmızı siyah ağaçlarla ilgili yutturmaca doğrudur.

  3. AVL ağaçları
  4. Rabin-Karp string eşleştirme sıkıştırma için kullanılır.
  5. Bir otomatın eklerini hesaplayın .
  6. Apple Inc. tarafından uygulanan Bloom filtresi
  7. Bresenham'ın algoritması .

Programlama Dili Kütüphaneleri

Bence dikkate değer. Programlama dil tasarımcıları, bazı mühendislerin bu veri yapılarını ve algoritmalarını uygulamasının, başkalarının da gerekmeyeceği zamana ve çabanın değdiğini düşünüyorlardı. Kütüphanelerin varlığı, Java uygulamaları için C ile yazılmış, ancak daha az yazılımla yeniden düzenlenmiş temel veri yapılarını bulabilmemizin bir parçasıdır.

  1. C ++ STL için listeler, yığınlar, sıraları, haritalar, vektörleri ve algoritmaları içerir , arama ve sıralama yığın manipülasyon .
  2. Java API çok geniştir ve çok daha fazlasını kapsar.
  3. Boost C ++ kütüphanesi Boyer-Moore ve Knuth-Morris-Pratt dize eşleştirme algoritmalarının gibi algoritmalar içerir.

Tahsis ve Çizelgeleme Algoritmaları

Bunları ilginç buluyorum çünkü sezgisel denmelerine rağmen, kullandığınız politika gerekli olan algoritma türünü ve veri yapısını belirler, bu nedenle kişinin yığınlar ve sıralar hakkında bilmesi gerekir.

  1. En Son Kullanılanlar, birçok şekilde uygulanabilir. Bir liste tabanlı uygulama Linux çekirdeği.
  2. Diğer olasılıklar First In First Out, En Sık Kullanılanlar ve Round Robin.
  3. VAX / VMS sistemi tarafından bir FIFO çeşidi kullanılmıştır.
  4. Richard Carr tarafından Saat algoritması , Linux'ta sayfa çerçeve değiştirme için kullanılır.
  5. Intel i860 işlemci rastgele bir değiştirme politikası kullandı.
  6. Uyarlanabilir Değiştirme Önbelleği bazı IBM depolama denetleyicilerinde kullanılır ve PostgreSQL'de yalnızca patent endişelerinden dolayı olsa da kullanılmıştır .
  7. Arkadaş bellek ayırma algoritması TAOCP Vol Knuth tarafından tartışılmıştır. 1, Linux çekirdeğinde ve FreeBSD tarafından ve facebook'ta kullanılan eş zamanlı eşzamanlı ayırıcı kullanılır .

* Nix sistemlerinde çekirdek yararlar

  1. grep ve awk , NFA'ların Thompson-McNaughton-Yamada yapısını, görünüşe göre Perl uygulamasını bile döven düzenli ifadelerden uygularlar .
  2. tsort topolojik sıralama uygular.
  3. fgrep , Aho-Corasick string eşleştirme algoritmasını uygular.
  4. GNU grep , yazar Mike Haertel'e göre Boyer-Moore algoritmasını uygular.
  5. Unix üzerindeki crypt (1), Enigma makinesinde bir şifreleme algoritması çeşidi uyguladı.
  6. Doug McIllroy tarafından uygulanan Unix diff , James Hunt ile birlikte yazılan bir prototip temelinde, Levenshtein mesafelerini hesaplamak için kullanılan standart dinamik programlama algoritmasından daha iyi bir performans sergiliyor. Linux sürümü kısa düzenlemek mesafeyi hesaplar.

Kriptografik Algoritmalar

Bu çok uzun bir liste olabilir. Şifreleme algoritmaları, güvenli iletişim veya işlemleri gerçekleştirebilen tüm yazılımlara uygulanır.

  1. Merkle ağaçları , özellikle Tiger Tree Hash çeşidi, GTK Gnutella ve LimeWire gibi eşler arası uygulamalarda kullanıldı .
  2. MD5 , yazılım paketleri için sağlama toplamı sağlamak için kullanılır ve * nix sistemlerinde ( Linux uygulaması ) yapılan bütünlük denetimleri için kullanılır ve ayrıca Windows ve OS X'te de desteklenir.
  3. OpenSSL , AES, Blowfish, DES, SHA-1, SHA-2, RSA, DES gibi birçok şifreleme algoritması uygular.

Derleyiciler

  1. LALR ayrıştırma yacc ve bizon tarafından uygulanır.
  2. Dominator algoritmaları, SSA formuna dayalı çoğu optimize edici derleyicide kullanılır.
  3. lex ve flex, düzenli ifadeleri NFA'larda derler.

Sıkıştırma ve Görüntü İşleme

  1. GIF görüntü formatı için Lempel-Ziv algoritmaları, * nix yardımcı programından başlayarak karmaşık programlara dönüştürülen görüntü işleme programlarında uygulanır .
  2. Çalışma uzunluğu kodlaması, PCX dosyalarını (orijinal Paintbrush programı tarafından kullanılan), sıkıştırılmış BMP dosyalarını ve TIFF dosyalarını oluşturmak için kullanılır.
  3. Dalgacık sıkıştırması JPEG 2000 için temel oluşturur, bu nedenle JPEG 2000 dosyalarını üreten tüm dijital kameralar bu algoritmayı uygular.
  4. Reed-Solomon hata düzeltmesi Linux çekirdeğinde , CD sürücülerinde, barkod okuyucularında uygulanır ve Voyager'dan görüntü aktarımı için evrişim ile birleştirildi.

Çatışma Odaklı Clause Öğrenme

2000 yılından bu yana SAT çözücülerinin endüstriyel karşılaştırma ölçütlerinde (genellikle donanım endüstrisinden, diğer kaynaklar da kullanılsa da) çalışma süresi neredeyse her yıl katlanarak azaldı. Bu gelişimin çok önemli bir kısmı, Davis Logemann ve Loveland'ın orijinal belgesindeki Boole Kısıt Yayılım algoritmasını, kısıtlama programlama ve yapay zeka araştırmalarından kaynaklanan yan tümce öğrenme tekniği ile birleştiren Çatışma Odaklı Clause Learning algoritmasıdır . Özel, endüstriyel modelleme için, SAT kolay bir sorun olarak kabul edilir ( bu tartışmaya bakın)). Bana göre bu, son yıllarda yaşanan en büyük başarı öykülerinden biri çünkü birkaç yıla yayılan algoritmik gelişmeleri, zekice mühendislik fikirlerini, deneysel değerlendirmeyi ve problemi çözmek için ortak bir toplumsal çabayı birleştiriyor. Malik ve Zhang CACM makale iyi bir okuma. Bu algoritma birçok üniversitede öğretildi (olduğu yerde dördüne katıldım), ancak tipik olarak bir mantık ya da resmi yöntemler sınıfında.

SAT çözücülerinin uygulamaları çoktur. IBM, Intel ve diğer birçok şirketin kendi SAT çözücü uygulamaları vardır. Paket yöneticisi OpenSUSE de bir SAT çözücü kullanan.


5
@HBBennett, CDCL sezgisel tarafından parametreleştirilmiş bir algoritmadır, ancak sezgisel değildir. Vaka üstel davranışının en kötü olduğu ancak bunu göstermesi önemsiz. Dahası, kesinlikle daha iyisini yapamayız ve pratikte yapabileceğimiz en iyisi bu yüzden tüm bilgisayar bilimcilerinin bilmesi gerektiğini düşünüyorum! LRU, FIFO, vs. gelince, bunlar buluşsaldır, ancak ARC'de olduğu gibi, uygulamak için akıllı algoritmalar veya veri yapıları gerektirebilir.
Vijay D,

9
Böyle bir yorum Simplex'e uygulanmayacak mıydı: başlangıçta iyi anlaşılmayan ve daha sonra üstel olduğu ancak pratikte çalıştığı ve daha sonra polinomu düzelttiği karmaşıklığı olduğu gösterildi mi? CDCL, algoritma analizi için ilginçtir, çünkü en kötü durum davranışını sergileyen formül ailelerini elde etmek için kanıt karmaşıklığından geçmeniz ve ayrıca bazı çözünürlük değişkenlerinden daha katlanarak olabileceğini göstermeniz gerekir. Böyle bir analizin hala açık olduğu simetri kırma ve otarki teknikler gibi çeşitli uzantılar vardır.
Vijay D

28
Bu bir öğrenci için bir hazinedir
neo1691

2
@EmanueleViola, birkaç örnek daha ekledim. Görev şimdi uzun, bu yüzden uzatmak istemiyorum. Belki özellikle Linux, Chrome, bir web sunucusu vb. Gibi gerçek bir sistemin bir parçası olarak Dijkstra, Simplex, Bloom filtrelerinin uygulamaları hakkında yeni bir soru sormalısınız.
Vijay D

4
Hacker haberi ve r / programlama.
Vijay D

40

PageRank , en çok bilinen bu tür algoritmalardan biridir. Google'ın kurucu ortağı Larry Page ve ortak yazarlar tarafından geliştirilen Google, orijinal arama motorunun temelini oluşturdu ve o sırada rakiplerinden daha iyi arama sonuçları elde etmelerine yardımcı olmak için büyük ölçüde kredilendirildi .

Bazı web sayfalarından başlayan ve onu yeni bir sayfaya götürmek için rasgele bir bağlantıyı tekrar tıklatarak "rasgele sörfçü" olduğunu hayal ediyoruz. "Sörfçü her sayfada ne kadar zaman harcayacak?" Sörfçü bir sayfada ne kadar zaman harcarsa, sayfanın o kadar önemli olduğu düşünülür.

M

Mkπ0kπ0M


7
Bunun tipik bir algoritma materyali olduğunu sanmıyorum.
Manu

14
Bu arada ilk önce bir algoritma dersinde PageRank'i öğrendim. Aslında profesörün bunu seçtiğini düşünüyorum, çünkü "pratikte kullanılan algoritmalar" ın güzel bir örneği. Örnekleri "CLRS'nin ilk yarısı" türü malzemeyle sınırlandırırsanız, örneklerin listesi çok uzun veya çok önemsiz olacaktır - quicksort, B-trees ve Dijkstra algoritması her yerde bulunur.
Huck Bennett

2
PageRank’i lisans öğrencilerine öğretiyoruz.
Aaron Roth

6
Ayrıca bunu lisans öğrencilerine de öğretiyorum (hem gerekli algoritmalar sınıfında hem de daha özel bir grafik algoritmaları seçmeli dersinde).
David Eppstein

2
PageRank'i seçmeli bir lisans olarak öğrendim.
Vijay D

33

Doğrusal programlama problemlerini çözmek için Simplex yönteminin / algoritmasının yaygın olarak kullanılan CPLEX (veya benzeri) yazılımının uygulanmasından bahsedeceğim. Ekonomi ve operasyon araştırmalarında (?) En çok kullanılan algoritmadır.

“Eğer dünyadaki bilgisayar zamanının çoğunu hangi matematik probleminin kullandığı hakkında istatistik alırsa, o zaman (sıralama ve arama gibi veri tabanı işleme problemlerini saymazsak) cevap muhtemelen doğrusal programlama olacaktır. ” (L. Lovász, A new. Doğrusal programlama algoritması simpleks yönteminden daha iyi veya daha kötü? Matematik. Intelligencer 2 (3) (1979/80) 141-146.)

Simplex algoritmasının teoride de büyük etkisi vardır; bakınız, örneğin, (Polinom) Hirsch Konjeksiyonu .

Sanırım tipik bir lisans veya doktora. Algoritmalardaki sınıf Simplex algoritmasıyla ilgilidir (Gauss Elimination Method gibi lineer cebirdeki temel algoritmalar dahil).

(Sıralama için Quicksort dahil olmak üzere diğer başarılı algoritmalar Kitaptaki Algoritmalar bölümünde listelenmiştir .)


"ekonomi ve işletme araştırması" yeterince spesifik değil. CPLEX, sadece algoritmanın bir uygulaması olduğundan, aradığım örneklerden biri değildir; gcc derleyicisinin simplex yöntemini kullanması farklı olurdu.
Manu

12
Ekonomi ve OR hakkında konuştuğumuzda "doğrusal programlama problemlerinin" yeterince spesifik olduğunu düşünüyorum. Ayrıca, CPLEX ile uygulamanın arkasındaki algoritmayı kastettim.
vb le

16
“Günümüzde çoğu büyük firma ürünleri fiyatlandırmak ve tedarik zincirlerini yönetmek için doğrusal programlama kullanıyor. Nakliye firmaları bunu, küresel olarak dağıtılmış tedarikçilerden kapasitelere tabi olan uzak pazarlara kadar birçok ürünün sevkiyatlarını birleştirmenin, koordine etmenin ve yönlendirmenin en ucuz yolunu seçmek için kullanıyor. endüstri araştırma, harmanlama, üretim çizelgeleme ve dağıtım için kullanıyor. Demir çelik endüstrisi demir cevherlerini değerlendirmek, kok fırınları ilavesini keşfetmek ve ürün seçmek için kullanıyor ... " news.stanford.edu/news/2005/may25/ dantzigobit-052505.html
Sasho Nikolov

Teşekkürler. Ama teklifi çok belirsiz buluyorum. Sanırım bir öğrenci sınıfının önünde, yarısının uykuya dalacağını söylersem ;-) Eğer şöyle bir şey söylersek farklı olurdu: UPS, paketleri aşağıdaki gibi göndermek için LP kullanıyor ... Böyle örnekler söylemiyorum. bulmak çok önemsiz ama "çoğu büyük firma LP kullanıyor" göz önüne alındığında, en azından birine işaret edebileceğimizi umuyorum .
Manu

10
Başımın üstünde, 2007'den beri LAX (havaalanı), güvenlik personelini programlamak için Stackelberg oyunlarını çözmek için yazılım kullandı. Büyük LP'leri çözmek her şeyin bir parçasıdır, bakınız örneğin teamcore.usc.edu/ARMOR-LAX . Bunun yanı sıra, Yöneylem Araştırması departmanınızdan birisine
sorardım:

30

Anladığım kadarıyla, Ulusal Yerleşik Eşleşme Programı uzun süredir istikrarlı evlilik problemi için Gale-Shapley algoritmasının sadece düz bir uygulamasıydı . O zamandan beri eş tahsisler (aka "iki beden problemi"), vb. Gibi bazı ekstra ayrıntıları ele almak için biraz güncellendi ...


Kararlı evliliğin tipik algoritmalar materyali olduğundan emin değilim.
Manu

16
Tardos ve Kleinberg Algoritmaları Tasarım kitabında ve ayrıca Motwani'nin Randomize Algoritmaları'nda var ve her iki kitap da yaygın olarak kullanılıyor. Kararlı evlilik, algoritma derslerinde evrensel olarak öğretilemez, ama kesinlikle çoğunda öğretilir.
Sasho Nikolov 12:13

10
Bir hızlı arama o kadar göstermiştir ortaya koymaktadır Berkeley CS70 , MİT en 6,042 , UMD en CMSC451 , vb ...
mhum

1
İlginç bir şekilde, eş ödevlerini eklediğinizde, sorun NP-tamamlandı: arxiv.org/abs/1308.4534 . Bununla birlikte, pratikte bu çok fazla bir soruna neden olmuyor gibi görünüyor: en.wikipedia.org/wiki/…
Joshua Grochow

2
@EmanueleViola geleneksel olarak ele alınmayabilirken, Kleinberg / Tardos kitabına dahil edilmesi daha popüler hale getirdi, (ve olmasa bile!)
Suresh Venkat

24

Ayrıca doktora düzeyinde bir şeyler ekliyorsanız, birçok (en çok?) Lisansüstü CS programı kodlama teorisinde bir ders içerir. Kodlama teorisinde bir dersiniz varsa, kesinlikle kompakt disklerin çalışma biçiminin bir parçası olan Reed-Solomon kodunu ve JPEG, MP3 ve ZIP dosya formatlarında kullanılan Huffman kodlamasını ele alacaksınız . Kursun yönüne bağlı olarak , GIF formatında kullanılan Lempel-Ziv'i de kapatabilirsiniz . Şahsen, lisans algoritmaları kursunda Lempel-Ziv'e katıldım, ancak bunun atipik olabileceğini düşünüyorum.


1
Ve Huffman hakkında bir proje için gerekli olan bir undergrad olarak kodlayan bir konferans aldım.
Brian S

Huffman CLRS'nin ilk bölümlerinden birinde, bu yüzden kesinlikle kalifiye olmalı
Sasho Nikolov

21

GNU grep , belirtilen bir düzenle eşleşmeyi içeren satırlar için bir veya daha fazla giriş dosyasını aramak için kullanılan bir komut satırı aracıdır. Grep'in çok hızlı olduğu bilinmektedir ! İşte yazarından Mike Haertel'den bir alıntı ( buradan alınacak ):

GNU grep uses the well-known Boyer-Moore algorithm, which looks first for the
final letter of the target string, and uses a lookup table to tell it how far
ahead it can skip in the input whenever it finds a non-matching character.

19

Daha genel olarak Kanellakis ödülü , ACM tarafından pratikte büyük etkisi olan kesin teorik keşifler için verilir.

2012 ödülü, yakın komşu problemler için veri madenciliğinde boyutsallığın azaltılması için bir yöntem haline gelen, bölgeye duyarlı hassala yöneliktir (ve öğretilmesi nispeten kolaydır - en azından algoritmanın kendisi).


Bence bu öğretilebilir ama çok öğretilmiyor.
Manu

3
Talihsiz, ama doğru. Ancak, LSH değişkenleri (Count-min kroki ve akrabaları gibi) "büyük veri" veya "veri madenciliği" kurslarında görünmeye başlıyor. Mesela algoritmalar sınıfımdaki çiçek filtrelerini öğretiyorum.
Suresh Venkat 12:13

Kişisel bir deneyim olarak, LSH bizim için “büyük veri” (100 milyon ürün) örneği üzerine ölçeklenmedi.
lynxoid 14:13

1
@ Lynxoid bu ayrı bir tartışma / soru :). Nerede işe yaradığına dair bu örnekle alakalı olduğunu düşündüğüm örnekler var.
Suresh Venkat

18

ε

Bu veri yapılarının endüstriyel kullanımlarından bazıları şunlardır:

  • Google'ın yapılandırılmamış veri analizi için Sawzall sistemi, 'en popüler öğeler' işlevini uygulamak için Count Sketch'i kullanıyor
  • AT & T'nin ağ trafiğini izlemek için Gigascope "akış veritabanı" sistemi , CountMin taslağını uygular .
  • Sprint'in Sürekli İzleme (CMON) sistemi, CountMin'i uygulamaktadır .

Ayrıca CountMin uygulamaları hakkında bilgi toplayan bir site .

Öğretme konusunda, temel eskiz tekniklerinin Princeton'da, lisanslı ayrık matematik derslerinde öğretildiğini biliyorum. İlk algoritmalar kursumda CountMin taslağını öğrenmiştim. Her durumda, CountMin analizi neredeyse tüm diğer randomize algoritmalar için yapılan analizlerden daha basittir: çift bağımsızlık ve Markov'un eşitsizliğinin basit bir uygulamasıdır. Çoğu algoritma dersinde bu standart bir materyal değilse, bunun tarihsel nedenlerden dolayı olduğunu düşünüyorum.


1
Harika örnekler (şu anda tam bir temel algo olmasa da).
Manu

16

Son on yılda, çeşitli böbrek donör eşleştirme programları aracılığıyla böbrek nakli sayısının (ve kalitesinin, sanırım?) Arttırılması için algoritmalar kullanılmıştır. Bu konuda en son haberleri bulmakta sorun yaşıyorum, ancak işte en az birkaç işaretçi:

  • 2007'ye kadar, Eşli Bağışlar İttifakı, Abraham, Blum ve Sandholm algoritmasını kullanıyordu . Hala kullanıyor olabilirler, ancak çevrimiçi arayarak bulamadım. Bu algoritma neredeyse kesinlikle "standart" kurslarda yer almamakla birlikte, genel olarak NP tamamlanmış bir sorun için yeterince iyi bir algoritma sağlamak için bu kurslarda mutlaka öğretilen bazı temel fikirleri bir araya getirir (bir Döngü Örtüsü varyantı) ).

  • Ulusal Böbrek Tescili ayrıca (bir noktada) CPLEX dahil olmak üzere bazı standart algoritmalar kullanır. Bu aslında 60 kişiyi birbirine bağlayan bir nakil zinciri oluşturdu .

Bu, sadece algoritmaların başarısından değil, NP-tamamlanmış problemler için algoritma çalışmanın öneminden en sevdiğim örneklerden biridir. Kelimenin tam anlamıyla hayat kurtarabilirler ve çoktan yaptılar !


Ayrıca, bu algoritmaların daha basit bir versiyonu tahta oyunlarında ticaret yapmak için kullanılır: okasaki.blogspot.co.uk/2008/03/what-heck-is-math-trade.html
Radu GRIGore

15

Konuşma tanıma ve diğer birçok uygulamada hala yaygın olarak kullanılan Viterbi'nin algoritması: http://en.wikipedia.org/wiki/Viterbi_algorithm Algoritmanın kendisi temel dinamik programlamadır.

Vikipedi: "Viterbi algoritması, 1967 yılında Andrew Viterbi tarafından gürültülü dijital iletişim bağlantılarına göre evrişimli kodlar için kod çözme algoritması olarak önerildi. [1] çevirmeli modemler, uydu, derin uzay iletişimi ve 802.11 kablosuz LAN'lar: Artık konuşma tanıma, konuşma sentezi, anahtar kelime belirleme, hesaplamalı dilbilim ve biyoinformatik alanlarında da kullanılmaktadır. tanındığında), akustik sinyal, gözlemlenen olay dizisi olarak değerlendirilir ve bir metin dizisi, akustik sinyalin "gizli nedeni" olarak kabul edilir. Viterbi algoritması, akustik sinyal verilen en muhtemel metin dizisini bulur. "


13
  1. A * birçok Kişisel Navigasyon Cihazında (aka GPS birimleri) kullanılır.
  2. A * çok iyi tanımlanmıştır ve oldukça basit bir şekilde uygulanmıştır.
  3. A * tamamen önemsiz değildir, ancak doktora almaz. onu anlamak için.

A *, oyun tasarımında da sık sık öğretilir. Ben yok düşünüyorum Modern 3D oyunlar genellikle NPC navigasyon için A * kullanın, ancak 2D / izometrik oyunların yanı sıra eski oyunlar, algoritmanın faydalanmak yoktur.
Brian S

@BrianS 3D oyunlarda kullanılan yol bulma algoritmalarının örneklerini biliyor musunuz, özellikle oyunlardaki NPC'leri (örneğin bir atıcı npc gibi) bir haritayı altıgen sektörlere bölmek ve bunu kareler yerine düğüm olarak kullanmak gibi bir şey okudum. ve bu daha yumuşak bir harekete izin verdi.
Goodwine,

@Goodwine, Üzgünüm, 3D oyunlarda gerçek dünyaya yol bulma algoritmaları örneğim yok. Kişisel deneyimim "küp" benzeri ortamlarda (karakterlerin 3D karakterlerine rağmen 2D'de durduğu küplerden oluşan harita) ve oyuncu karakterlerini test etmek için kullanılan yapay AI'larla olmuştur.
Brian S

12

Jens Vygen'in Chip Design projesi için BonnTools adlı projeye göz atın. http://www.or.uni-bonn.de/~vygen/projects.html Bu konuda bazı konuşmalar duydum ve makalelerinin bazılarına da baktım. Raghavan-Thompson tarzı randomize yuvarlama ve büyük ölçekli çoklu emtia akışı LP'lerini çözmek için çoklayıcı ağırlık güncelleme yöntemini kullanıyorlar. Ancak, herhangi bir büyük projede olduğu gibi, bazı mühendislik çalışmaları da yapmaları gerekiyor, ancak yöntem çok iyi bilinen algoritmalara dayanıyor.


Bir göz atacağım, ancak tipik algoritmalar materyali gibi görünmüyor.
Manu

8
Hmm, randomize yuvarlama genellikle doktora düzeyinde algoritmalar derslerinde öğretilir, değil mi?
Chandra Chekuri

2
Neden sadece randomize yuvarlama? Sanjeev Arora, Elad Hazan ve Satyen Kale, mulplicative ağırlıklar güncelleme yönteminin bile UG düzeyinde öğretilecek kadar temel olduğunu düşünüyor :) Tüm algoritmaları öğrencilere, böl ve yönet, dinamik programlama, rastgele örnekleme ve benzerleriyle birlikte öğretti. ” (cf. cs.princeton.edu/~arora/pubs/MWsurvey.pdf ).
Jagadish


10

Yukarıdaki tüm fantezi algoritmalarında, kimsenin saygıdeğer Lempel-Ziv sıkıştırma algoritması ailesinden (1977 / 78'de icat edilmiş) bahsetmediğine şaşırdım.

  1. Bunlar her yerde kullanılır - görüntü işleme akışını metne dönüştürür. LZ * 'nin var olan en çok kullanılan tek bir algoritma ailesi olması mümkündür.
  2. Sözlük sıkıştırma, sıkıştırma teorisinde önemli bir atılımdı ve Shannon-Fano tarzı yaklaşımdan keskin bir ayrılma oldu.
  3. Ailedeki algoritmalar oldukça basit ve anlaşılması kolaydır.

Güncelleme

Görünüşe göre kısaca zaten bahsedildi.


10

tekil değer ayrıştırma (SVD), istatistiksel faktör analizi veya temel bileşenler analizi ile güçlü bir bağlantıya sahiptir ve bir lisans doğrusal cebir ya da istatistik dersinde anlaşılabilir ve birçok önemli teorik özelliğe sahiptir. ayrıca görüntü sıkıştırma algoritmalarında da rol oynar. $ 1M Netflix ödül yarışmasında (tarihin dünyanın en büyük veri madenciliği yarışmalarından biri) kazanan girişlerde önemli bir rol oynadı ve şimdi kullanıcı derecelendirmelerini tahmin etmek için kendi sitelerinde uygulandı. Ayrıca , biyolojik teoriye dayanan , İbranilerin kendi kendini organize eden sinir ağları ile yüksek derecede ilişkili olduğu da biliniyor .

Makine öğrenimi ve yapay sinir ağlarında yaygın olarak kullanılan ve evrensel olarak uygulanan bir optimizasyon tekniği olarak kullanılan, Newton'un yönteminin temel bir 2d biçimi olduğu degrade inişiyle bir bağlantısı var . SVD'yi elde etmek için bir degrade-iniş algoritması vardır.


10

Eulerian bir yol bulmak genom düzeneğinin tabanında bulunur - tam genomlarla çalışırken yaygın olarak gerçekleştirilen bir görevdir (biyoinformatik, tıp, adli tıp, ekoloji).

GÜNCELLEME Bu açık olanı unuttum: UPS, FedEx, USPS herkesin her gece büyük Gezgin Satıcı Problemini çözmesi gerekiyor. Sürücüleri en uygun yoldan göndermeleri için çok zaman ve para kazandırır.

UPDATE2 Minimum geribildirim tepe seti problemi birçok işletim sisteminde kilitlenme çözünürlüğü için kullanılır.


TSP'nin paket teslimat şirketlerinin çözmeye çalıştığı sorun olduğuna emin misiniz? Daha büyük bir pratik zorluk sırt çantası ve diğer paketleme sorunları olduğunu düşündüm.
András Salamon

Sürücüler için yapılan görevler her gün değişmektedir (yani UPS görevlisinin her gün aynı evi ziyaret etmesi gerekmez), bu nedenle rotaların günlük olarak güncellenmesi gerekir. Saf bir TSP değil - tek yönlü sokaklar, U dönüşü olmayan, sokağın bir tarafında paketler teslim eden, ötekinde olmayan paketler gibi ek kısıtlamalar var.
lynxoid 14:13

Paketlemenin de önemli olduğundan eminim.
lynxoid 14:13

9

Bu sistemi İngiltere'deki maksimum yaşam sayısını, maksimum eşleştirme algoritmalarına dayanarak böbrek nakli ile kurtarmayı seviyorum: Eşleştirilmiş ve Fedakar Böbrek Bağışı . Aynı durumda diğer insanlarla aynı şekilde bağış yapmak isteyen eşleşmeyen bir arkadaşı / akrabası olan böbreklere ihtiyaç duyan insanları eşleştirir. Ardından, bağış gününde tüm bağışçılar aynı anda bağışta bulunur ve bunu takiben ülke çapında hızlı bir şekilde böbrek alıcılara ulaştırılır.


8

Bu nispeten yeni kitap, bir algoritma sınıfı için ek materyal olarak kullanılabilecek, uygun, genişletilmiş / toplanmış bir formda sorunun eksiksiz / ayrıntılı bir cevabı olarak görülmeye değer. [bunlardan bazıları daha önce belirtilmiş; Güçlü örtüşmenin kendisi dikkat çekicidir.]


2. ref, Amerikan Fizik Enstitüsü ve IEEE Bilgisayar Topluluğu ortak bir yayını olan Science & Engineering'de Bilgisayar Bilimi Ocak / Şubat 2000 sayısından alınmıştır. konuk editörler Tennessee Üniversitesi Jack Dongarra ve Oak Ridge National Laboratory ve Savunma Analizler Enstitüsü Bilgisayar Bilimleri Merkezi Francis Sullivan tarafından derlenen
vzn


6

Çok temel algoritmaların düşünülmesi

  1. Rastgele sayı üreteçleri her yerde ve özellikle tüm oyunlarda bulunur.
  2. Veritabanları, B +, Hashes, öncelikli sıralar, düzenli ifade, kriptografi, sıralama vb. Dahil olmak üzere birçok algoritmadan oluşur.
  3. Sıralama her yerde, örneğin Excel'de kullanılır. Aslında gerçek hayatta her zaman kullanılır, ancak genellikle insanlar geçici algoritmalar kullanır.
  4. Eşlik bitleri her yerde kullanılır
  5. Huffman kodlaması sıkıştırma ve iletim yazılımı içinde
  6. Yığınlar (LIFO) her yerde kullanılır. Programlama dillerinde, CPU'larda vb.

Gerçek hayatta göründüklerini göstermek güzel:

A. Birçok grup, telefon listelerini insanlar arasında hiyerarşik bir şekilde bölerek iletişim kurmak için bir tür örtücü ağaç algoritması kullanır. Hastane, müşterilerini FIFO algoritmasında düzenleyin


4
Sıralama bir algoritma değildir. Bu bir görevdir, yani gerçekleştirmek istediğiniz, bunun için bir algoritma tasarlamanız (veya pratikte) seçmeniz gereken bir şey.
David Richerby

Bunlar, soruda talep edildiği gibi spesifik örnekler olarak görünmüyor.
Kaveh


6

BT taramasının tıbbi uygulamasında büyüleyici bir algoritmik problem ortaya çıkar. Bilgisayarlı Tomografide (BT), vücut farklı açılardan X ışınlarına maruz kalır. Tarayıcının bir ucunda X ışını vericileri ve diğer ucunda sensörler bulunur. Böyle bir tarama serisinden, doktorun incelemesi için bir resim yeniden oluşturulur!

Lütfen, süzüldü çıkıntı algoritması taramalar kümesinden bir görüntünün yeniden yapılandırılması için temeldir. Bu algoritma aslında "sinyalin" Nyquist oranının altında örneklendiği bir yaklaşım problemidir. Bu algoritma tüm hastanelerde "perde arkasında" kullanılmaktadır ve temel filtrelenmiş geri projeksiyon, Fourier Dilim Teoremini elde etmek için Fourier dönüşümleri gibi lisans matematiğini kullanmaktadır .


6

FFT örneği

Bir keresinde FFT algoritmasının farklı bir sistem diline taşınmasına yardımcı oldum.

Algoritma, kablo tv / internet / telefonun eşeksenli dağıtımındaki hat kopmalarını belirlemek için kullanılmıştır. Temel olarak bir teknisyen müşterinin kutusuna bir sinyal göndermesini ister, aynı zamanda QoS, dB gibi belirli bir müşterinin istatistiklerini gerçek zamanlı olarak gösterir. Teknisyen kullanabilir. kısmi bir kırılmanın yaşandığı ev ve direk arasında birkaç ayak içinde belirleyeceğiniz veriler ve grafik (ya da bana söylendiği gibi).

Yukarıda bahsedildiği gibi FFT yaygın olarak kullanılmaktadır, ancak bu pratikte gördüğüm en bariz ve açık olanlardan biriydi (neden ve nasıl).

Üzgünüm, üst seviyede tutmak zorunda kaldım.


5

Bresenham'ın çizgi algoritması karşılaştığım en kullanışlı algoritma. Anlaşılması kolay Ive, çok sayıda uygulama için 3B döküm motoru için karmaşık bir ayırıcıya, karmaşık bir çokgen oluşturucuya ve karmaşık animasyon ve ölçeklendirme kullanımlarına kadar birçok uygulamada kullandı.



2

Wikipedia'da bir listede az ya da çok olarak sınıflandırılmış iyi bir algoritma / uygulama koleksiyonu var . Microsoft, en çok atıfta bulunulan kağıtları sağlar ancak bilgisayar bilimi ve uygulama alanları hakkında açık bir açıklama yapmaz. Huang tarafından derlenen farklı CS konferanslarından _http: //jeffhuang.com/best_paper_awards.html_ bir kronolojik liste de var.

Spektral Kümeleme , Jianbo Shi ve Jitendra Malik tarafından görüntü bölümleme için tanıtılan Normalize kesim algoritması olarak bilinen zarif bir kümeleme algoritmasıdır . İki küme arasında iyi bir kesişme noktası olan Veri kümeleme uygulamalarında da geliştirilmiştir.


-2

Bilgisayar bilimine sıkı sıkıya dayanan, ancak son birkaç on yılda günlük yaşamda muazzam / dönüştürücü gelişmeler geçiren ve büyük-kitlesel pratik / uygulamalı etkiye sahip soyutlama teorisyenleri tarafından kolayca göz ardı edilen diğer iki kişisel örnek. Zaten bütün bir nesil, dünyayı onlarsız bilmeden büyüdü. temelde Modelleme ve simülasyon kategorisi .

  • fizik simülasyonu algoritmaları . temel olarak Newton yasalarını kullanmak ancak diğer yasaları kullanmak (akışkanlar dinamiği gibi). mühendislik uygulamalarından, video oyunlarından ve bazen de filmlerden oluşan çok çeşitli uygulamalarda kullanılır. bu aynı zamanda sanal / test tasarımlarını benzetilmiş gerilmelere maruz bırakarak örneğin otomobillerin ve uçakların emniyetini, verimliliğini veya güvenilirliğini önemli ölçüde artırmaktan sorumludur. Biyoloji üzerine büyük etkileri olan biyoinformatikten, örneğin ilaç tasarımı, hastalığın önlenmesi vb: protein katlanması / yapı tahmini gibi önemli bir devam eden araştırma alanı . ayrıca bu yıllara dikkat edin: Kimyada Nobel Ödülü, Karplus, Levitt, Warshel'e kimya simülasyonu ile verildi. fizik simülasyonu algoritmaları, nükleer silahların güvenliği / testine dahil örneğin Los Alamos laboratuvarlarında.

  • ışın izleme / CGI algoritmaları . bu, sadece birkaç on yıl önce bir araştırma konusu olarak başladı (bir arkadaşım CS’de ışın tarama algoritmaları yazarken yüksek lisans derecesi aldı), ancak oyunlarda ve film yapımcılığındaki işlerde çok büyük bir rol oynadı. filmlerde özel efektler. Bu endüstriler kelimenin tam anlamıyla milyarlarca dolara yatırım yapıyor ve bu algoritmalara biniyorlar ve tüm büyük şirketler bunlardan yararlanmaya dayanıyor, örneğin Pixar . Çoğunlukla başlangıçta örneğin film filmlerinde kullanılır, teknik şimdi çok yaygındır, "tipik" filmlerde bile rutin olarak kullanılır. örneğin yakın zamanda The Great Gatsby inandırıcı veya stilize edilmiş ortamlar çizmek, filme / karakterlere rötuş yapmak, vb. CGI efektlerine çok güveniyordu.


-3

Rosetta Kodu, Semantik MediaWiki ile Programlama Görevi (692) ve Programlama Dili (518) tarafından uygulanan algoritmaları listeler .


Bu nasıl bir "ticari, resmi veya yaygın olarak kullanılan yazılım / donanımda kullanılan" temel algoritmalar ... örneğidir?
David Richerby

Diğer yanıtlarda listelenen mükemmel algoritmaların her birinin uygulamalarını burada Wikipedia / DBpedia URI'lerine çapraz referans olarak vermek yararlı olacaktır. Tüm bu algoritmalar için Wikipedia / DBpedia URI'sı yoktur; ama Rosetta Kodu sayfaları var.
Wes Turner

bigocheatsheet.com ayrıca Big-O karmaşıklığını ve epeyce bir algoritma için Wikipedia makalelerine bağlantılarını listeler.
Wes Turner

Soru, önemli yazılım parçalarında kullanılan çekirdek algoritmalarından örnekler ister. “İşte bir milyon dilde uygulanan algoritmaların bulunduğu bir web sitesi” bu soruyu hiç yanıtlamıyor. Aslında, sorunun ne aradığının tam tersi.
David Richerby

Bununla birlikte, faydalı, bağlamsal olarak alakalı bir referans.
Wes Turner

-5

belki de bu izleyicinin ilgilendiği tüm ana / tercih edilen algoritmalar bu noktada belirtilmiştir. ancak, birkaç tane daha tamamlanmaktan bahsetmeyi hak ediyor. ve önemli bir algoritma olarak kabul edilen şeyin bir analizi burada önemlidir.

CS ve IT alanlarında uzun zaman önce AI'da “hedefleri taşıma” olarak adlandırılan bir fenomen olduğu görülüyor . bu, alanın nispeten hızlı bir şekilde ilerlediği ancak insanların çabucak zihinsel olarak "yeni normal" e uyum sağladığı ve geçmişe dönüştükten, yani küçümsendiğinden veya küçültüldükten sonra, sıradan veya dikkate alınamayan gerçek veya atılımlı ilerlemeler gerçekleştirdiği psikolojik bir fenomendir. Bu, algoritmaların Ar-Ge'den “dağıtım” a geçişte olduğu gibi bu soruya çok dikkat çekiyor. Sorunun yazarını ileriki yorumlarda alıntı:

Aslında, yazılan tüm kodların ihmal edilebilir bir kısmı, algoritmik bir bakış açısıyla ilginç olan bir şey uygulamaktır.

fakat bu problemlidir ve temel olarak "algoritma" kelimesinin TCS merkezli bir yeniden tanımlanmasıdır. Muhtemelen ilginç algoritmalar ileri düzeydedir. bu, bir problemin gelişmiş bir algoritmaya indirgenmesi durumunda, bunun artık "ilginç" olmadığı anlamına mı geliyor? ve "gelişmiş" açıkça hareketli bir hedeftir. bu nedenle “algoritmaları” dar veya geniş bir şekilde tanımlamanın bir yolu vardır . TCS tanımının bağlamda değiştiği görülüyor, ancak TCS'de bile, örneğin “algoritmik lens” olarak adlandırılan geniş tanımlamaya doğru bir eğilim var .

bazen en yaygın algoritmalar aynı zamanda en göz ardı edilenlerdir! İnternet ve WWW, algoritmalar için geniş bir çevre / yakın ekolojidir. hala yaklaşık 2 yaşında (yaklaşık 1991) gençken hala kısa sürede kitlesel ve üssel olarak büyümüştür. WWW sitesi büyümesi muhtemelen ünlü üssel Moores yasasını geride bıraktı.

İnternet / WWW birçok karmaşık algoritma tarafından desteklenir. İnternet, yönlendiricilere yerleştirilmiş karmaşık yönlendirme algoritmalarına sahiptir (Cisco gibi milyarlarca dolarlık şirketleri yeniden çalıştırmaktadır). Orada bazı gelişmiş teoriler örneğin yönlendirme algoritmalarında uygulanabilir . Bu algoritmalar onlarca yıl önce ortaya çıkan, ileri / ileri araştırmaların bir konusuydu, ancak şimdi çok iyi ayarlanmış ve iyi anlaşılmamış bir durumdu.

Çok kısa bir süre önce unutmamalıyız, önde gelen araştırmacılar internet dünyasının çalışıp çalışmadığından veya mümkün olup olmadığından (erken devre anahtarlama araştırmasında, önceki devre anahtarlamadan ayrılan zamandaki radikal bir yeni tasarım modelinde görüldüğünden) emin değildiler ve Birkaç yıl önce bile, bir noktada ölçeklenememesinin ve hacimdeki ezici yükselmeler nedeniyle başarısız olmaya başladığına dair korkular vardı.

ayrıca gelişmiş hata algılama / düzeltme özelliğini kullanır . Muhtemelen internet büyük, en hataya dayanıklı sistem şimdiye hala büyüyor, insanlar tarafından inşa etti.

daha sonra, WWW’yi çalıştıran algoritmaların gelişmiş olmasını sağlamak için güçlü bir durum var. HTTP ve web sunucuları çok iyi ayarlanmış / optimize edilmiştir ve ayrıca gelişmiş güvenlik / şifreleme protokollerini (HTTPS) kullanır. Bir web sayfasının oluşturma mantığı , Javascript programlama dili ile birlikte HTML5 ve CSS3'te son derece gelişmiş bir hale geldi .

nispeten yeni CSS, yeniden kullanılabilirlik ve kalıtım gibi OOP programlamasına benzer çeşitli ilkelere sahiptir . dizgi hakkında, TeX , Knuth tarafından icat edilmiş, şimdi web sayfalarında (ve muhtemelen yüzbinlerce bilimsel makalede ya da daha fazlasında kullanılan) icat edilen önemli, dahili olarak karmaşık bir bilimsel dizgi sistemidir (programlama dilinden çok farklı değildir).

İnternette inşa edilen ve hala kolektif zekaya dayanan yeni bir algoritma alanı daha ortaya çıkıyor . stackexchange yazılımının kendisi, karmaşık bir kolektif istihbarat sistemi örneğidir. sosyal ağlar aynı zamanda kolektif zekanın temel özelliklerini de ortaya koyuyor ve bu zekayı arttırmak için sürekli özellikler ekleniyor (örneğin facebook "Beğeniler" sadece birkaç yaşında). derecelendirme sistemleri alanında işbirlikçi filtreleme algoritmaları temel alınmıştır ve yeni araştırma ve uygulamalara dayanarak hala gelişmektedir.

Bu nedenle, kısacası, günlük insan deneyimini yalnızca “sahadaki hedeflerin” çok ötesinde , dönüştüren tüm devrimci başarılar . Sorunun başlığında belirtildiği gibi, tüm çekirdek algoritmalar konuşlandırıldı . Şimdi, her zaman her yerde bulunmaz ve görünmez, "su tesisatının bir parçası" olan IT ifadesi gibi.


buna birçok atıf eklenebilir. Burada başlamak için sadece bir geçerli: DARPA ve internet devrimi Waldrop tarafından
vzn

internet optimizasyonu,
akamai'nin

-8

İnanılmaz derecede başarılı (donanım) bir algoritma, açılışta sıfırlama işlemidir.

Güç uygulandığında bilgisayarın bilinen bir durumda olduğu bir sistem olmadan, başka hiçbir şey doğru olmaz .

Açılışta sıfırlama, gömülü ya da başka şekilde düşünülmüş olsun, içinde CPU olan herhangi bir şeyin çalışmasının nedenidir.

Bir dahaki sefere programcılar ve bilgisayar bilimcileri için sulama delikindeyseniz, vişneli soda kadehinizi açılışta sıfırlayın.


5
Açılışta sıfırlama bir algoritma değildir. Bu bir görev, yani gerçekleştirmek istediğiniz, bir algoritma tasarlamanız gereken bir şey.
David Richerby
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.