Aho-Corasick algoritması ile Rabin-Karp algoritması arasındaki karşılaştırma


11

Birden çok desen aramayı destekleyen dize arama algoritmaları üzerinde çalışıyorum. Çalışma süresi açısından en güçlü adaylar gibi görünen iki algoritma buldum: Aho-Corasick ve Rabin-Karp . Ancak, iki algoritma arasında kapsamlı bir karşılaştırma bulamadım. Hangi algoritma daha verimli? Ayrıca, hangisi paralel hesaplama ve çoklu kalıp arama için daha uygundur? Son olarak, hangisi daha az donanım kaynağı gerektirir?

AC algoritması için, arama fazı zaman alırken , RK için . Bununla birlikte, RK için çalışma süresi AC'ye benzer yapan dir. Geçici sonucum, RK'nin AC kadar belleğe ihtiyaç duymadığı için pratik olarak daha iyi görünmesidir. Bu doğru mu?O(n+m)O(nm)O(n+m)


Tüm desenleriniz aynı uzunlukta mi?
Hendrik Jan

@HendrikJan Hayır, farklı uzunluk modelleri
Hawk

Desenler farklı uzunluktaysa, RK kullanarak paralel olarak işlenmesi zor görünüyor mu? Vikipedi sayfası, karmaların güncellenmesi farklı uzunluklarda yapılabilmesine rağmen, bu kalıpların eşit uzunlukta olduğunu gösteriyor gibi görünüyor.
Hendrik Jan

Bir çeşit teorik çalışma veya pratik deneyimle ilgileniyor musunuz?
Raphael

@ Raphael Akademik olarak, bunu deneysel olarak kanıtlamadan önce teorik çalışmayı uygulardık. Soruyu buraya gönderdim çünkü programlama cevapları beklemiyorum. Mantıksal bir algoritmik cevaba ihtiyacım var
Hawk

Yanıtlar:


4

Asimptotik çalışma süresi analizinin bu iki algoritma arasında seçim yapmak için en iyi araç olması muhtemel değildir: asimptotik analiz sabit faktörleri yok sayar ve sabit faktörler burada kritik olacaktır. İki algoritma temel olarak aynı asimptotik çalışma süresine sahiptir, bu nedenle asimptotik analiz muhtemelen aralarında seçim yapmak için çok yararlı değildir.

Bunun yerine, iki algoritma arasındaki doğru seçim deneysel analizdir. Temsili bir iş yükü belirleyin ve ardından her iki algoritmanın da iş yükünüzdeki, uygulamada kullanmayı düşündüğünüz makine türlerindeki performansını karşılaştırın.


Bu arada, Rabin-Karp'ın asimtotik çalışma süresi hakkında hafif bir karışıklığa sahip olabileceğiniz anlaşılıyor. Bir yandan Rabin-Karp'ın çalışma süresine sahip olduğunu söylersiniz , ancak bir sonraki cümlede Rabin-Karp'ın çalışma süresine sahip olduğunu söylersiniz . Belki de beklenen (ortalama-vaka) ve en kötü-vaka çalışma süresi arasındaki farktan şaşkınsınız.O ( n + m )O(nm)O(n+m)

Rabin-Karp randomize olduğundan, beklenen (ortalama-vaka) çalışma süresi, uygulamada gerçek dünya performansını tahmin etmek için kullanılacak uygun metriktir. Özellikle, burada ortalama karma fonksiyon seçimi üzerinden alınır. Özellikle dize seçimini ele geçiren bir ortalama değil . Olası en kötü dize ve desen için bile ortalama çalışma süresi hala . Uygun bir karma işlev ile, işletim süresi daha uzun olduğu ihtimali olduğu katlanarak küçüktür . Başka bir deyişle (ve biraz resmi olmayan olmak), Rabin-Karp'ın den daha uzun sürmesi katlanarak küçük bir şanstır.c ( n + m ) c O ( n + m )O(n+m)c(n+m)cO(n+m)saati. Zaten üstel olarak küçük kötü şeylerin gerçekleşme olasılığını kabul etmeliyiz - örneğin, kozmik ışının, programınızda sonsuza kadar döngü yapmasına neden olan küçük bir flip-flip'e neden olan küçük ama sıfır olmayan bir şans var. Yani, bu katlanarak küçük şanstan endişe etmek mantıklı değil.

Bir mühendislik açısından Rabin-Karp işletim süresi olan [ya da da olabilir]. Göz ardı malzeme; bu uygulama ile gerçekten ilgili değil.O ( n m )O(n+m)O(nm)


1

Ancak, iki algoritma arasında kapsamlı bir karşılaştırma bulamadım.

iki algoritmanın göreceli performansına ilişkin böyle bir soru genellikle ortalama verilere karşı gerçek verilere bağlı en kötü duruma bağlıdır. teorik cevap, Aho-Corasick algoritmasının büyük veri sınırı durumunda / asimptotik olarak Rabin -Karp'den daha iyi performans göstereceğidir , ancak bu sınıra ulaşılan uygulama ve veri bağımlıdır ve arama arasındaki dengesizliktir. / çalışma süreleri.O ( n m )O(n+m)O(nm)

ancak "kapsamlı karşılaştırma" için örtük sorgunuz olmadan, bazı makaleler deneysel olarak / deneysel olarak bu iki ve diğer algoritmaları gerçek veriler üzerinde karşılaştırmış ve farklı algoritmaların artıları / eksileri / takaslarının analizi / karşılaştırmasını içermektedir:

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.