İki algoritmanın herhangi bir girdi için aynı sonucu döndürüp döndürmediğini nasıl kontrol edersiniz?


18

Tüm girişler kümesi sonsuz olduğunda, iki algoritmanın (örneğin, Birleştirme sıralaması ve Naif sıralaması) herhangi bir girdi için aynı sonucu döndürüp döndürmediğini nasıl kontrol edersiniz?

Güncelleme: Ben , genel durumda bunun algoritmik olarak nasıl imkansız olduğunu anlattığınız için teşekkür ederim . Dave'in yanıtı , her zaman işe yaramayan, ancak oldukça etkili olan hem algoritmik hem de manuel (insan zekası ve metafora tabi) yöntemlerin harika bir özetidir.


5
yuval'ın dediği gibi, herhangi iki program için bunu belirleyebilecek bir prosedür yoktur. ancak örneğiniz gibi özel bir durumda bunu kanıtlayabilirsiniz: örneğin, her iki algoritmanızın sıralı bir sıra döndürdüğünü ve kararlı olduğunu kanıtlarsanız, işiniz tamamlanmış olacaktır.
Sasho Nikolov

1
Otomatik bir teknik / algoritma mı yoksa bir dizi manuel teknik mi istiyorsunuz?
Dave Clarke

@SashoNikolov, performans çıktının bir parçası olarak kabul edilirse, ikisinin de aynı zamanda / alan karmaşıklığında çalıştığını göstermek zorunda kalacaksınız.
edA-qa mort-ora-y

1
Şunu mu demek istediniz: "check" veya kanıtlamak? "Herhangi bir girdi" veya tüm girdiler anlamına mı geliyor? Sorunun motivasyonu ve bağlamı nedir?
Kaveh

2
@AndresRiorio: İspat teknikleri, genel problemi çözen algoritmalardan farklıdır. Örneğin, durdurma problemi kararlaştırılamaz, ancak birçok programın (elle veya otomatik sezgisel tarama) sonlandırıldığını kanıtlamak kesinlikle mümkündür.
Raphael

Yanıtlar:


16

Nüfus edenlerin söylediklerinin aksine, bunu yapmak için birçok etkili teknik vardır.

Elbette bu yöntemlerin hiçbiri kararsızlık nedeniyle tam değildir, ancak sorunu ele almak için hacim ve hacim üretilmiştir.


heu · ris · tic . [Gr. κωρίσκω "keşfetmek"] n. 1. Çözeltinin doğru olduğu kanıtlanıp kanıtlanamayacağını göz ardı eden, ancak genellikle iyi bir çözüm üreten veya daha karmaşık sorunun çözümünü içeren veya onunla kesişen daha basit bir sorunu çözen bir sorunu çözmek için tasarlanmış bir teknik. 2. ( Teor. ) Çalışmayan bir algoritma.
JeffE

1
Bart Simpson: "Kazanamıyorum. Deneme."
Dave Clarke

9
@JeffE: İki algoritmanın aynı sonucu döndürüp döndürmediğini kontrol etmek istiyorsanız, bir kanıt yaparsınız. Bunu yapmak için birçok iyi teknik var. Tabii, tüm yöntemler eksik, ama kimin umurunda? Goedel'in eksiklik teoremi matematikten vazgeçmek için bir neden değildir!
Neel Krishnaswami

3
@JeffE İki rasgele algoritmanın aynı sonucu döndürüp döndürmediğini belirlemek için hesaplanabilir bir işlev olmaması , özellikle bir kanıt arama işlemi hesaplanabilir olmadığından , iki belirli algoritma için soruyu yanıtlayamayacağınız anlamına gelmez. işlev . Benzer şekilde, rasgele bir algoritmanın her zaman sonlanıp sonlanmayacağını mekanik olarak belirlemek mümkün olmadığına bakılmaksızın, belirli algoritmalar için garantili sonlandırmayı kanıtlayan çok sayıda makale vardır.
Ben

2
Uygulamada, aynı işlevi hesaplaması beklenen iki algoritma, bisimülasyon tabanlı bir denklik kanıtı sağlar. (Yukarıda belirtilen sıralama algoritmaları durumunda, döngülerin / özyinelemenin ara aşamaları farklıdır.) Her ikisinin de G / Ç davranışının aynı spesifikasyonunu uyguladıklarını göstermek için iyi eski Hoare-mantığı kullanarak söyleyebilirim gitmek.
Kai

10

"İmkansız" ifadeler üzerinde biraz durmak gerekirse, işte basit bir kanıt taslağı.

Kasetlerindeki çıktıları ile durdurulan Turing Machines tarafından çıktı ile algoritmaları modelleyebiliriz. Bantlarında çıktı ile kabul ederek veya reddederek (bu durumda çıktı yoksa) durdurabilen makinelere sahip olmak istiyorsanız, bu makineleri "dur veya dur değil" reddetme makinesi yoktur.

Şimdi, bu tür iki TM'nin her giriş için aynı çıkışa sahip olup olmadığını belirlemek için bir algoritmaya P sahip olduğumu varsayın . Daha sonra, bir TM A ve bir X girişi verildiğinde , aşağıdaki gibi çalışan yeni bir TM B oluşturabilirim:

  1. Girişin tam olarak X olup olmadığını kontrol edin
  2. Evetse, sonsuz bir döngü girin
  3. Hayır ise, girişte A'yı çalıştırın

Şimdi çalıştırabilirsiniz P üzerinde A ve B . B , X üzerinde durmaz , ancak diğer tüm girişler için A ile aynı çıkışa sahiptir , bu nedenle ve yalnızca A X üzerinde durmazsa, bu iki algoritma her giriş için aynı çıkışa sahiptir. Ancak P'nin , iki algoritmanın her girdi için aynı çıktıya sahip olup olmadığını söyleyebileceği varsayıldı, bu nedenle P'ye sahip olsaydık, keyfi bir makinenin rastgele bir giriş üzerinde durup durmadığını söyleyebiliriz, yani Durma Sorunu. Duruş Probleminin kararsız olduğu bilindiğinden, P var olamaz.

Bu, iki algoritmanın her zaman çalışan aynı çıktıya sahip olup olmadığını belirlemek için genel (hesaplanabilir) bir yaklaşım olmadığı anlamına gelir, bu nedenle analiz ettiğiniz algoritma çiftine özellikle akıl yürütmeniz gerekir. Bununla birlikte, pratikte, büyük algoritma sınıfları için çalışan hesaplanabilir yaklaşımlar olabilir ve herhangi bir özel durum için bir kanıt oluşturmak için kesinlikle kullanabileceğiniz teknikler vardır. Dave Clarke'ın cevabı size burada bakmanız gereken bazı şeyler verir. "İmkansızlık" sonucu, yalnızca tüm algoritma çiftleri için sorunu bir kez ve herkes için çözecek genel bir yöntem tasarlamak için geçerlidir.


Belki benim Psadece sıralama algoritmaları için çalışır. (kışkırtıcı soru)
Raphael

@ Raphael Evet, çizdiğim argüman böylesine kısıtlı bir P hakkında hiçbir şey söylemiyor , sadece genel bir varlığın var olamayacağını söylüyor. Benim içgüdüm, böyle bir iddia duymadım rağmen, genel algoritma yerine "sıralama algoritmaları" ile sınırlamak bile durdurma sorunu hala kararsız olduğunu, bu durumda imkansızlık kanıtı hala tutar.
Ben

2
Daha genel olarak, Rice'ın teoremi , kanıtlamaya çalıştığınız özelliğe sahip en az bir algoritma ve en azından olmayan bir algoritma olduğunda, bir algoritma hakkında bir şey kanıtlamanın hesaplanabilir bir yolu olmadığını belirtir. Örneğin, A algoritması göz önüne alındığında, B algoritmasını giriş olarak alan ve B'nin A ile eşdeğer olup olmadığını test eden hesaplanabilir bir fonksiyon yoktur.
Gilles'in SO- kötü olması '25

Rice teoreminin Turing Makineleri için değil, yalnızca dillerin özellikleri için geçerli olduğunu belirtmek önemlidir (bunları "algoritma" modeliniz olarak kullandığınızda). İki Turing Makinesinin her ikisinin de aynı dili tanıdığı, ancak birinin özelliği olduğu ve diğerinin sahip olmadığı mümkünse, Rice teoremi geçerli değildir ve mülkü test etmek için genel bir hesaplanabilir yöntem olabilir. Ancak Rice'ın teoremi bu durum için açıkça geçerlidir, evet.
Ben

2

Genel olarak imkansız, ancak birçok kısıtlama bunu mümkün kılabilir. Örneğin, BDD'leri kullanarak iki düz çizgi kod programının eşdeğerliğini kontrol edebilirsiniz. Sembolik yürütme diğer birçok durumu da ele alabilir.


1

Genel olarak bu eşitliği kanıtlayan bir algoritma tasarlamak imkansızdır. İpucu: Durma probleminden azalma.


Pek çok teknik mevcuttur, ancak hiçbiri tam otomatik değildir.
Dave Clarke

Mümkün olup olmadığını bilmiyorum, cevabınız sadece bir yorum. cevap değil.

@SaeedAmiri: Cevabın bağlamına biraz ettim; Özellikle yeterince iyi değilse, yeterince eksiksiz olduğunu düşünüyorum.
Raphael

@Raphael, Yuval zihninde azalma açıktır ve OP'nin bunun farkında olmadığını düşünmüyorum, ancak IMO'nun zor sorunu özel durumlar için bir yol bulmaktır, Bu yüzden bu bariz azaltma OP'yi hatırlatmanın bir yorumu olabilir genel durum için.

2
@SaeedAmiri: Bu OP ve seçmenlerin biz değil karar vermeleri için.
Raphael
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.