Pratikte en çok hangi algoritmalar kullanılır?


19

En sık hangi algoritmalar kullanılır?

Lütfen cevap başına tek bir algoritma yazın, yanıtınızı kısa tutmaya çalışın (bir veya iki satır).


Kaveh, belki çok fazla tedarik etmeden önce cevapları beklemelisin? :)
Suresh Venkat

1
@Suresh: Üzgünüm. :)
Kaveh

3
Çoğu zaman ne anlamda? (Algoritmayı uygulayan farklı bilgisayar programlarının sayısı? Algoritmayı kullanan kurulu yazılımların sayısı? Algoritmanın yürütme sayısı? Algoritma kullanılarak işlenen veri miktarı? Algoritmanın kullandığı CPU saniye?) Nerede? (Akademi, endüstri, ev bilgisayarları?) Böyle bir şeyi tahmin etmek mümkün mü; cevaplardan herhangi birini destekleyecek verilerimiz olabilir mi?
Jukka Suomela

1
Jukka Suomela'nın işaret ettiği gibi soru çok belirsiz. Daha fazla açıklama yapılmadan, cevaplar algoritmalarla ilgili bir ders kitabının içindekilerden daha iyi olmayacaktır.
Tsuyoshi Ito

1
Yeni bir kitap var: "Geleceği Değiştiren Dokuz Algoritma: Günümüzün Bilgisayarlarını Yönlendiren Ustaca Fikirler" John MacCormick. Bkz. Press.princeton.edu/titles/9528.html
Alessandro Jacopson

Yanıtlar:


18

Hızlı Fourier Dönüşümü algoritmik problemi gerçek bilgisayar sistemleri tarafından günde en çok çözüldü mü? Yakın olmalı. Bu yüzden Cooley-Tukey FFT algoritmasını aday gösterirdim .


Bu gibi, FFT temel bilgisayar bilimleri eğitiminde gözardı edilir, ama bu olduğunu kesinlikle bizim modern toplumda muazzam bir etkiye sahip bir algoritma ve çevremizdeki birçok modern şeyler her zaman FFT çatırdayan edilmektedir.
Jukka Suomela

14

Çarpma işlemi.

Belki de en önemsiz olmayan en eski algoritmalardan biri ve FFT'den daha sık çözülen bir problem.


Çarpma bir algoritma değildir, farklı algoritmalar tarafından çözülen birçok alt problemle ilgili bir sorundur: donanım veya yazılım tarafından gerçekleştirilen sabit boyutlu tamsayı ve kayan nokta; değişken boyutlu bignumlar (modulo ya da değil), matrisler, ...
Gilles 'SO- kötü olmayı durdurun'

Modern CPU'lardaki donanım çarpma devrelerine atıfta bulunuyordum (tamsayılar ve kayan nokta sayıları için; bu ikisi sonunda o kadar da farklı değil). Benim anlayışım, aynı temel yaklaşımın "sadece" çok zekice tasarlanmış versiyonları olma eğilimindedir - Orta Çağ'da zaten bilinen "uzun çarpma" algoritması.
Jukka Suomela

Çıkarma (karşılaştırma) çarpma işleminden çok daha sık kullanıldığını düşünüyorum ve çarpma işleminin bir algoritma olarak sayılmasının ve toplama / çıkarma işleminin neden olmadığını hiçbir şekilde göremiyorum. Ancak, bunun bir cevap olup olmadığını bilmiyorum.
Tsuyoshi Ito

Evet, toplama ve çıkarma, çarpma işleminden daha sık kullanılır - aslında, uzun çarpma algoritması esasen bir toplama çarpma işlemini azaltır. Ancak, burada aday gösterebileceğimiz tek bir toplama / çıkarma algoritması olup olmadığını bilmiyorum?
Jukka Suomela

@JukkaSuomela: Two'nun tamamlayıcı toplama ve çıkarma iyi bir aday olacaktır.
John Gietzen

13

Dijkstra ve Bellman-Ford en kısa yol algoritmaları. İnternet'te 2010 itibariyle en az 35.000 Otonom Sistem (AS) vardır. Her AS, bir bağlantı durumu yönlendirme protokolü (Dijkstra) veya bir mesafe vektör yönlendirme protokolü (Bellman-Ford) çalıştırmaktadır. Bir AS içindeki yönlendiriciler tipik olarak tablolarını birkaç dakikada bir periyodik olarak günceller, örneğin 10.

Böylece, günlük Dijkstra ve Bellman-Ford infazlarının sayısı en az 5 milyon. Ve bu sadece yönlendiricilerden.

Google Haritalar ve benzerlerinden en kısa yol hesaplamalarını 10 kat daha fazla hesaplaması gerekmedi. Günde yarım milyar infaz çok zor değil.


Günde yarım milyar infaz çok fazla gelebilir, ancak bu gezegende milyarlarca cep telefonumuz olduğunu unutmayın. Bu şeyler her zaman ne yapıyor? Veya her telefon görüşmesinde ne yapıyorlar? Bilmiyorum, ama tahminimce en azından en kısa yollardan çok daha fazla FFT yapıyorlar.
Jukka Suomela

8

14
Bu arada, quicksort'un gerçek dünyada en sık kullanılan sıralama algoritması olduğu gerçekten doğru mu? Yaygın olarak kullanılan bazı programlama dillerinde genel amaçlı bir "sıralama" işlevinin uygulanmasına hızlıca baktım. Perl: yakın zamanda quicksort'tan mergesort'a geçiş yapmış gibi görünüyor. Python: Timsort (birleştirme / ekleme sıralaması karma) kullanır. Java: Eskiden Timsort olan birleşikti. Veritabanları harici sıralama kullanma eğilimindedir. Quicksort zaten nesli tükenmekte olan bir tür mü?
Jukka Suomela

Bence bu çok iyi bir nokta. Birinin cevabı düzenleyebilmesi harika olurdu.
Juan Bermejo Vega

@Juan, Jukka'nın bahsettiği nokta doğru olmasına rağmen cevabı düzenlemek için herhangi bir neden göremiyorum.
Kaveh


7

Ben en çok kullanılan algoritma Parity Check (veya belki CRC veya bir tür hata düzeltme kodu) olduğunu düşünüyorum, çünkü her RAM erişiminde görünürler.


Ayrıca, herhangi bir IP tabanlı ağ üzerinden gönderilen her paket için en az bir kez kullanılır
Claus Broch



4

Sonlu otomata dönüştürülerek düzenli ifade eşleşmesi - Bu satırlar boyunca grep fonksiyonlarına inanıyorum.



3

Modern TCP uygulamalarındakinden daha yaygın olarak kullanılan algoritmaları düşünmek zordur : yani tıkanıklıktan kaçınma , hızlı yeniden iletim . Bu, bir algoritmanın ölçütlerini neyin karşıladığını nasıl belirlediğine bağlı olsa da ...


Ama gerçekten TCP algoritmalarını FFT'den (bu listede zaten var) daha sık kullanabilir misiniz? Bilgisayarım tek bir IP paketi gönderirse (TCP veya değil), genellikle bir sürü FFT hesaplaması tetiklemez mi? Genellikle paketler bir noktada WLAN, ADSL ve GSM gibi teknolojiler kullanılarak aktarılır ve bence çoğu FFT'ye dayanan modülasyonlar kullanır.
Jukka Suomela

Bence sen haklısın.
Lev Reyzin


2

SHA-1 (ve genel olarak hash fonksiyonları). Muhtemelen diğer algoritmaların çoğunu yürütme sayısı açısından yendi.


2

Veritabanı maddeleri için B + ağacı ile ilgili algoritmalar kullanılır


2

Zamanlama algoritmaları. Dünya çapındaki her kullanıcı cihazı ve sunucusu tarafından kullanılırlar. Bir dizi varyasyon kullanılıyor, "çok düzeyli geri bildirim kuyruğu" için birçok referans buldum


1

Bu yanıt "en sık" ı gerçek CPU çevrimleri açısından yorumlar.

70'lerde bilgisayar öğrenmeyi öğrenirken, bilgisayar (read: mainframe) döngülerinin büyük çoğunluğunun sıralamaya adanmış olduğunu hatırlıyorum. İş uygulamaları analiz ve raporlama için kapsamlı sıralama gerektirir. Bunun çok fazla değiştiğini düşünmüyorum, ama elbette diğer uygulamaların - e-posta, kelime işleme, vb. - yükselişi karışımı değiştirmiş olmalı. Bu türler genellikle alt türler oluşturmak için alanların art arda sıralanması gerektiğinden istikrarlı türlerdir (Quicksort değil).

Kesin olarak, en sık kullanılan algoritma, şüphesiz, başka bir şey olmadığı zaman Windows sistem bekleme süreci tarafından yürütülen şeydir ;-).


1

Sprase Matrix Vector Çarpın

... hemen hemen tüm lineer sistemlerin çözümünün ardındaki hesaplama işgücüdür. Sonuç olarak,

  • Bilim adamları / mühendisler diferansiyel denklemleri çözer
  • İstatistikçiler yeni korelasyonlar buldular (PCA)
  • Google pagerank çalıştırıyor
  • Telefonunuz konumunuzu GPS, ivmeölçerler, baz istasyonu konumlarından tahmin eder
  • Aracınız süspansiyonunuzu hareket halindeyken ayarlar
  • vb....

Herhangi bir süper bilgisayar veya kümedeki FLOP'ların çoğu seyrek bir mat-vec içinde harcanır.


1

Newton yöntemi. Kare kökleri hesaplamak, bölümü hesaplamak için kullanılır. Doğrusal programlama yapmak için kullanılabilir. Daha genel olarak, (dışbükey) optimizasyonun görevi. Eylem / enerjiyi en aza indirerek Fizikteki diferansiyel denklemleri çözmek için kullanılabilir.


1

Hashing ve kırmızı-siyah ağaçlar.

Zaten STL'de (hash_map, harita) uygulanmışlar ve her programcı, rasgele bir veri türüyle dizinlenmiş bazı bilgileri saklamak istediğinizde böyle bir kabın inanılmaz derecede kullanışlı olduğunu biliyor.



0

Dinamik Programlama .

Bence DP şimdiye kadar ankette belirtilen diğer algoritmalardan "daha sık" kullanılıyor. Önemsiz bir algoritma kavramının, çağrılan bir algoritmanın belirli bir uygulamasının kaç kez yerine, gerçek hayatta programcı tarafından ne sıklıkta uygulandığı anlamında "daha sık" çıkarıyorum.

DP çok yönlüdür ve birçok yüzü vardır. Bazen onu bilinçaltında kullandım ve daha sonra DP yaptığımı fark ettim.

Tabii ki, Dinamik Programdan daha yaygın olan şeyler vardır, ancak bunlar çoğunlukla veri yapısıdır (dizi, bağlantılı liste, karma).


7
Bu, tek bir algoritma değil, bir algoritma tasarım paradigması (açgözlü veya primal-dual'e benzer) olduğu için diğer önerilerden biraz farklıdır.
Jukka Suomela

0

String Matching, uygulama yazılımında ve veritabanı düzeyinde her zaman kullanılır.

Tam olarak, bazı alt doğrusal beklenen çalışma zamanına ulaşan birkaç oldukça ilgili algoritma (KMP, Boyer-Moore) vardır. Aynı zamanda bir CS bakış açısından çalışmak ilginçtir.

Yaklaşık dize eşleşmesi, yani hizalamalar, muhtemelen daha da ilginçtir. "Otomatik düzeltme" özelliklerini biliyor musunuz? Ayrıca, gürültülü dizi verilerinde (örneğin DNA) yapılan aramalar hizalamalar kullanılarak yapılır.

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.