İki algoritmanın ne zaman “benzer” olduğu söylenir?


16

Teorik olarak çalışmıyorum, ancak çalışmalarım arada bir teori kağıtlarını okumak (ve anlamak) gerektiriyor. (Bir dizi) sonucu anladıktan sonra, bu sonuçları birlikte çalıştığım, çoğu teoride çalışmayan insanlarla tartışıyorum. Bu tür tartışmalardan biri sırasında aşağıdaki soru ortaya çıktı:

Ne zaman verilen iki algoritmanın "benzer" olduğu söylenir?

"Benzer" derken ne demek istiyorum? Diyelim ki iki algoritmanın benzer olduğunu söyleyebiliriz.

İstem 1 " algoritmasına benzer Algoritma , problemini de çözer "B XABX

İstem 2 "Algoritmamız Algoritma benzer "C

Biraz daha spesifik yapmama izin verin. Diyelim ki grafik algoritmalarıyla çalışıyoruz. İlk olarak, iki algoritmanın benzer olması için gerekli bazı koşullar:

  1. Aynı sorunu çözüyor olmalılar.
  2. Aynı üst düzey sezgisel fikre sahip olmalılar.

Örneğin, grafik geçişi, önce genişlik ve derinlik ilk geçişi hakkında konuşmak yukarıdaki iki koşulu karşılar; en kısa yol hesaplamaları için, önce genişlik ve Dijkstra'nın algoritması yukarıdaki iki koşulu karşılar (elbette ki ağırlıksız grafiklerde); vb.

Bunlar da yeterli koşullar mı? Daha spesifik olarak, iki algoritmanın benzer olması için gerekli koşulları sağladığını varsayalım. Onlara gerçekten benzer mi diyeceksiniz?

  1. farklı asimtotik performansları var mı?
  2. özel bir grafik sınıfı için, bir algoritma zamanı gerektirir, diğeri zamanı gerektirir?O ( n, 1 / 3 )Ω(n)O(n1/3)
  3. farklı sonlandırma koşulları var mı? (hatırlayın, aynı sorunu çözüyorlar)
  4. ön işleme adımı iki algoritmada farklı mıdır?
  5. iki algoritmada bellek karmaşıklığı farklı mıdır?

Düzenleme: Soru açıkça çok bağlama bağlıdır ve özneldir. Bununla birlikte, yukarıdaki beş koşulun bazı öneriler almasına izin vereceğini umuyordum. Soruyu daha fazla değiştirmekten ve yanıt almak için gerekirse daha fazla ayrıntı vermekten mutluluk duyuyorum. Teşekkürler!


1
gerçekten bağlama bağlıdır. Örneğin, belirli ardışık algoritmalar için, DFS ve BFS çok farklıdır ve biri çalışmayabilir. Paralel ayarlarda, DFS (veya en az bir varyant) P-tamamlanmışken, BFS "paralel olarak kolaydır".
Suresh Venkat

@SureshVenkat - Sorunun içeriğe bağlı olduğuna katılıyorum. Bir tartışma başlatmamaya ilgi
duyarak,

4
Sorun, yakın ve yakın olmasıdır. Çarpıcı ağırlık güncelleme yöntemini "temelde ikili bir arama" olarak düşünmenin bir yolu var, ancak yanlış bağlamda bu çılgınca gelebilir. FWIW, yukarıdaki tüm vakalarınızda, iki algoritmanın farklı olduğunu bildirmeyi hayal edebiliyorum.
Suresh Venkat

1
Bu soru benim için çok öznel görünüyor. Temelde, kanonik bir tanım olmadığında "benzer" bir tanım istiyorsunuz.
Joe

Yanıtlar:


23

"Algoritma A, Algoritma B'ye benzerdir" şeklinde tutarlı bir tanım bile vermek zor bir sorundur. Birincisi, "aynı sorunu çözüyor olmalılar" ın gerekli bir koşul olduğunu düşünmüyorum. Tek bir yazıda diyor Genellikle zaman "algoritma o Teoremi 2 algoritma benzer B Teorem içinde 1 algoritması," A aslında daha farklı bir problem çözme B , ancak yeni bir sorun işlemek için bazı küçük değişiklikler vardır .A2B1AB

İki algoritmanın aynı olmasının ne anlama geldiğini belirlemeye çalışmak bile ilginç ve zor bir sorundur. "İki algoritma ne zaman aynı?" http://research.microsoft.com/~gurevich/Opera/192.pdf


17

Daha sık olmamakla birlikte, "Algoritma B'yi ayrıntılı olarak yazmak istemiyorum, çünkü tüm ilginç detaylar Algoritma A'daki bilgilerle neredeyse aynı ve 10 sayfalık sınırı aşmak istemiyorum, ve yine de son teslim tarihi üç saat içinde. "


7

Konuşma diline göre "benzer" demek isterseniz, sanırım JeffE'nin cevabı bazı insanların ne anlama geldiğini yansıtıyor.

Yine de teknik anlamda neye önem verdiğinize bağlıdır. Eğer umursadığınız tek şey asimptotik zaman karmaşıklığı ise, özyineleme ve yineleme arasındaki fark önemli olmayabilir. Hesaplanabilirlik sizin için önemli olan tek şeyse, sayaç değişkeni ile tek sembollü yığın arasındaki fark önemli değildir.

AMsem:AMsem(P)PMMMsem(P)sem(Q)

M(M,)xyxyMsem(P)sem(Q)PQPQ

M

Daha genel olarak, soruyorum - neye önem veriyorsunuz (sezgisel terimlerle), bu sezgisel özellikleri temsil eden matematiksel nesneler nelerdir, algoritmalardan bu nesnelere nasıl eşleştirebilirim ve bu alanın yapısı nedir? Ayrıca, nesnelerin uzayının benzerlik kavramını kabul etmek için yeterli yapıya sahip olup olmadığını da soracağım. Bir programlama dili anlambilim perspektifinden gelen yaklaşım budur. Bilgisayar bilimindeki çok farklı düşünce kültürleri göz önüne alındığında, bu yaklaşımı çekici bulup bulamayacağınızdan emin değilim.


5

Jeff'in yanıtı boyunca, bunlardan birinin yazarı diğerinin yazarının makalesini inceleyebileceğini beklerse iki algoritma benzerdir.

Ancak şaka bir yana, teori topluluğunda, A algoritmasının çözdüğü sorunun, tamamen farklı bir sorunu çözebilecek B algoritmasına "benzer" olup olmadığına oldukça teğet olduğunu söyleyebilirim. Aynı ana teorik fikirden dolayı "çalışırsa" A, B'ye benzer. Örneğin, her iki algoritmada da, verileri çok daha düşük boyutlu bir alana yansıtabileceğiniz, Johnson-Lindenstrauss lemması ile normları koruyabileceğiniz ve daha sonra bir kaba kuvvet araması yapabileceğiniz ana fikir midir? Sonra algoritmanız, hangi sorunu çözerseniz seçin, bunu yapan diğer algoritmalara benzer. Çok çeşitli problemleri çözmek için kullanılabilecek az sayıda ağır görev algoritmik tekniği vardır ve bu tekniklerin birçok "benzer" algoritma setinin sentroidlerini oluşturduğunu düşünürüm.


3

Çok ilginç bir soru ve çok güzel bir kağıt Ryan!

Algoritmalar arasındaki genel benzerlik hakkında bir değerlendirme yapmanın temelde öznel bir değer yargısı olduğu fikrine kesinlikle katılıyorum. Teknik açıdan, algoritmaların benzerliğine karar vermek için yakından gözlemlenen bir takım özellikler olsa da, sonunda kişisel bir zevk meselesidir. Sorunuzun belirli noktalarına bakarken aynı madalyonun her iki tarafının da önemini açıklamaya çalışacağım:

Teknik açıdan:

  1. Ryan zaten her iki algoritmanın da aynı sorunu çözmesi gerektiğini belirtti . Daha da ileri gidilebilir ve bu kavramı, A algoritması tarafından anlaşılamayan aynı örneğin polinom dönüşümünün olduğunu kanıtlamak için genellikle yeterli olduğunu söyleyerek bu kavramı genelleştirebiliriz, böylece B algoritması onu işleyebilir. Ancak, bu aslında çok zayıf olacaktır. Benzerliği daha güçlü bir şekilde düşünmeyi tercih ederim.
  2. Bununla birlikte, iki eşdeğer algoritmanın aynı sezgisel fikre sahip olmasını asla beklemezdim - yine de, bu yakalanması kolay olmayan bir tanımdır. Bundan daha fazla, benzer olduğu düşünülen algoritmaların ana mantığı takip etmediği çoğu zaman söz konusudur. Örneğin, farklı fikirleri izleyerek farklı şekillerde ortaya çıkan bazı sıralama algoritmalarını düşünün. Aşırı bir örnek olarak, genellikle matematiksel topluluk tarafından stokastik süreçler olarak kabul edilen (ve dolayısıyla onların görüşüne eşdeğerdir) genetik algoritmaları düşünün ve bunlar daha sonra farklı bir şekilde modellenir ve analiz edilir.
  3. N(N21)ek desen veritabanları aslında aynı sayıda düğümü tam olarak aynı sırayla genişletir ve bu da her iki algoritmanın (ve sezgisel taramalarının) çok güçlü bir anlamda kesinlikle eşdeğer olmasını sağlarken, ilk yaklaşımın ön işleme ve ikincisi yoktur. belirli bir örneği çözmeye başlamadan önce önemli bir ek yüke sahiptir. Ancak, Desen Veritabanlarınız daha simulatenous etkileşimleri düşünür düşünmez, aralarında performansta büyük bir boşluk vardır, böylece kesinlikle farklı fikirler / algoritmalardır.
  4. Aslında, çoğu insanın algoritmaları kendi amaçları ve performansları için değerlendireceğini düşünüyorum . Bu nedenle, asimtotik performans, programlar arasındaki benzerlik hakkında akıl yürütmenin iyi bir ölçüsüdür. Bununla birlikte, bu performansın tipik bir durum olmadığını unutmayın, böylece iki algoritmanın aynı asimtotik performansa sahip olması, ancak pratikte farklı davranması durumunda, muhtemelen farklı oldukları sonucuna varacaksınız. Bu konuda güçlü kanıtlar, her iki algoritmanın da hem zaman hem de bellekte aynı performansa sahip olacağı olacaktır (ve bu, Suresh'in söylediği gibi DFS ve BFS'yi farklı görünmesini sağlar). Bu iddia size ikna edici gelmiyorsa, lütfen mükemmel (ve çok tavsiye edilen kitaba) bakın: Evreni ProgramlamaSeth Lloyd tarafından. 189 Sayfasında, algoritmaları farklı olarak kabul etmek için kullanılabilecek 30'dan fazla karmaşıklık ölçümüne sahip bir listeyi ifade eder.

Peki algoritmaları benzer / farklı kılan nedir? Benim görüşüme göre (ve bu tamamen spekülatiftir), temel fark size önerdikleri ile ilgilidir. Birçok, birçok (birçok!) Algoritma aynı amaca hizmet ederken sadece birkaç teknikte farklılık gösterir, böylece tipik durum girdinin farklı aralıkları için farklıdır. Ancak, tüm farklılıkların en büyüğü size önerdikleridir. Algoritmaların farklı yetenekleri vardır ve bu nedenle kendi güçlü ve zayıf yönleri vardır. İki algoritma aynı gibi gözüküyor ancak farklı durumlarla başa çıkmak için farklı şekillerde genişletilebiliyorsa, bunların farklı olduğu sonucuna varabilirim. Bununla birlikte, genellikle, iki algoritma aynı görünüyor, böylece onları aynı olarak göreceksiniz ... birisi önemli bir ayrım yaparak gelene kadar ve aniden tamamen farklı!

Üzgünüm, cevabım çok uzun sürdü ...

Alkış,


1
Aslında, Ryan olduğunu ileri sürdü değil hem algoritmalar aynı sorunu çözmek için gerekli.
Jeffε

Doğru! Sadece bu konuda görüşlerimi topluyordum, ama kesinlikle haklısın!
Carlos Linares López

2

Bir benzerlik metriği tanımlanmadan benzerlikten bahsedilmesi iyi tanımlanmamıştır. İki algoritmanın benzer olabileceği birçok yol vardır:

Quicksort ve Mergesort çok benzer sorunları çözer, ancak bunu yapmak için farklı algoritmalar kullanırlar. Benzer algoritmik karmaşıklığa sahiptirler (en kötü durum performansları ve bellek kullanımları değişebilir). Quicksort ve Mergesort, Bubblesort'a benzer, ancak Bubblesort'un çok farklı performans metrikleri vardır. Karmaşıklık istatistiklerini yoksayarsanız Quicksort, Mergesort ve Bubblesort'un hepsi aynı denklik sınıfındadır. Bununla birlikte, algoritmik karmaşıklığı önemsiyorsanız, Quicksort ve Mergesort, Bubblesort'a kıyasla çok daha benzerdir.

Smith-Waterman dinamik programlama ve HMM-sekans karşılaştırma iki sekansı hizalama problemini çözmeye çalışır. Ancak, farklı girdiler alırlar. Smith-Waterman girdi olarak iki dizi alır ve HMM-dizi karşılaştırmaları HMM ve girdi olarak bir dizi alır. Her iki çıkış sırası hizalaması. Fikirleri motive etmek açısından, her ikisi de Levenshtein'in düzenleme mesafesine benzer , ancak sadece çok yüksek bir seviyede.

İki algoritmanın benzer olarak adlandırılabileceği bazı ölçütler şunlardır:

  1. Giriş / çıkış türleri
  2. Algoritmik / Bellek Karmaşıklığı
  3. Girdi türleri ile ilgili varsayımlar (örneğin yalnızca pozitif sayılar veya kayan nokta kararlılığı)
  4. İç içe ilişkiler (örneğin, bazı algoritmalar diğerlerinin özel durumlarıdır)

Benzerliğin anlamı hakkındaki eleştirel karar devam etmektedir. Bazen bir algoritmanın karmaşıklığını önemsiyorsunuz, bazen de önemsemiyorsunuz. Benzerliğin tanımı tartışmanın içeriğine bağlı olduğundan, "benzer algoritma" terimi iyi tanımlanmamıştı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.