Bir algoritmanın Ses ve Komple olduğunu söylemek ne anlama gelir?


33

Farklı ses ve yorumların yorumlarını duydum . Anlıyorum tamlık varsa çözüm bulunmasının aracı. Bir algoritma demek demek ses demektir .

Bir algoritmanın Ses ve Komple olduğunu söylemek ne anlama gelir?


Yanıldığına göre, kabul ettiğin cevabı tekrar değerlendirmeni öneririm.
BlackJack

Sadece yaptım :)
mutelogan 20:12

Yanıtlar:


49

Bunlar mantıkla ilgili olarak çok özel terimlerdir.

İşte bazı başlangıç ​​noktaları:

http://en.wikipedia.org/wiki/Soundness

http://en.wikipedia.org/wiki/Completeness_(logic)

Temel olarak, sağlamlık (bir algoritmanın), algoritmanın doğru olmayan herhangi bir sonuç vermeyeceği anlamına gelir. Örneğin, bazen sıralanmış bir liste döndürmeyen bir sıralama algoritması varsa, algoritma sağlam değildir.

Diğer taraftan, eksiksizlik, algoritmanın olası tüm girdileri ele aldığını ve hiçbirini kaçırmadığını ifade eder. Öyleyse, sıralama algoritmam sıralanmamış bir liste döndürmediyse, ancak 7 sayısını içeren listelerde çalışmayı reddettiğinde, tam olmazdı.

Tüm girdiler üzerinde çalışıyorsa (program dünyasında anlamsal olarak geçerli) eksiksiz ve sağlamdır ve her zaman doğru yanıt alır.


Teşekkürler. Sağlığın ne anlama geldiği konusunda kafam çok karıştı . Birden fazla cevap alıyordum.
mutelogan

Yardıma memnun oldum ... :)
Erik Dietrich

13
Bir örnek, İkili Arama olacaktır, Ses, ancak tam değildir. Sıralanmamış listelerde çalışamaz.
Malfist

3
@Malfist ama 'programın dünyası' sıralı listeler değil mi?
Andres,

1
“Bir algoritma geçersiz girişlerde yanlış çalışıyor” sağlamlığını veya bütünlüğünü etkilemez, bu nedenle ne ikili arama ne de karşılaştırma türleri ilgili değildir - her iki algoritma da geçerli girişler için sağlam ve eksiksizdir.
Blaisorblade

15

Erik Dietrich'in cevabını biraz kafa karıştırıcı buluyorum. Aşağıdaki daha iyi:

Bir algoritma ses, eğer bir cevap verirse, bu cevap doğruysa doğrudur. İsteğe bağlı herhangi bir giriş için doğru bir cevap vermeyi garanti ederse bir algoritma tamamlanır (veya cevap yoksa, başarısızlık vermeyi garanti eder).

İki önemli nokta:

  1. Sağlamlık zayıf bir garantidir. A'nın feshedileceğine söz vermez.
  2. Sağlamlık ve Tamlık ilgili kavramlardır; infact onlar birbirlerinin mantıksal muhabbetidir. Örneğin, Soundness, bir cevap döndürülürse bu cevabın doğru olduğunu söylüyor. Tamlık, cevap verildiğinde cevabın doğru olduğunu söylüyor.

Örnek olarak, bir sayı listesi girişi olarak alan bir sıralama algoritması A düşünün. Sonuç her zaman sıralanmış bir liste olduğunda sonuç döndürdüğünde A'nın ses çıkardığını söyleriz. Aynı şekilde, bir numara listesi verdiğimizde, sıralanmış bir listeye geri dönmeyi garanti ederse, A'nın tamam olduğunu söyleriz.


Neden kafan karıştı? "Bir algoritma sağlam, eğer bir cevap verirse, bu cevap doğruysa". Aynı aracı olup "Temel olarak, algoritma gerçek dışı bir sonuç vermezse bu aygıtın (bir algoritma) sağlamlığı". Bunlar aynı şey demek. Sizin (çok kısa) Tamlık tanımınıza gelince, bu, wikipedia bağlantısındaki hiçbir şeyle eşleşmez ve kendinize ait hiçbir referanstan söz etmezsiniz. Söylemeliyim ki, Erik'in tanımları daha pratiktir. Seninki doğruysa, daha iyi kanıt ve daha fazla et sağlamalısın.
saat

1
Sadece açıklığa kavuşturmak için, "Tamamlanma, bir cevabın iade edilmesi halinde doğru olduğunu söylüyor" derken, cevabın "doğru" olduğu anlamına mı geliyorsunuz?
Dois

1
“Bir cevap iade edilirse doğrudur” anlamıyla “bir cevap iade edilirse doğru” ile aynı anlama gelir. Ayrıca, cevaplar “doğru” olamaz, sadece doğru olamaz. softwareengineering.stackexchange.com/a/311649/21277 daha doğrudur.
Blaisorblade

2

Bu terimler hesaplama teorisinden geldi, bu yüzden hesaplama teorisi bağlamında yazılım mühendisliği bağlamından daha anlamlılar.

Çoğu standart hesaplama modelinde hesaplama problemleri dil olarak gösterilmiştir . Dil, bir dizi dizedir. Bir algoritma, o zaman, sadece verilen bir dizgenin bir dilin üyesi olup olmadığına karar veren bir sistem veya prosedürdür (doğru veya yanlış döndürerek). Yazılım mühendisliği terimlerinde, hesaplama teorisi, karakter dizilerinin değişmez olduğunu varsayarak, bunun gibi görünen fonksiyonlarla özellikle ilgilidir:

boolean some_function(string argument){...}

Dilin bir üyesi olan her bir argüman için doğru olursa, bu işlevi tam olarak adlandırırız . Dilin üyesi olmayan her bir argüman için yanlış döndürürse ses olarak adlandırırız .

Başka bir deyişle, doğru olmasını istediğimizde her zaman doğru dönerse tamamlanır, yanlış döndürmesini istediğimizde her zaman yanlış döndürürse ses çıkar.

Bu nasıl diğer fonksiyonlara çevrilebilir? Görünen o ki, rastgele bir miktarda veriyi bir dizgeye yerleştirmek ve onu fonksiyonun içinde yeniden oluşturmak neredeyse her zaman mümkün. Dolayısıyla argüman türü ve aritelik üzerindeki kısıtlama, teorik bir basitleştirmeden başka bir şey değildir. Bununla birlikte, iade tipi üzerindeki kısıtlama daha önemlidir. Boole sonucu gerektiren sorunlara karar sorunları denir . Çoğu hesaplama teorisi karar problemlerini içerir; P ve NP setleri karar problemleriyle sınırlıdır (ve NP, en azından NP bu kısıtlama olmadan makul bir şekilde tanımlanamamıştır). Durma problemi, yoğun olarak çalışılan bir karar probleminin bir başka örneğidir.

Benim görüşüme göre, bu terimler karar problemleri alanı dışında genelleşmiyor, bu yüzden genel bir işlevi tartışırken aralarındaki fark gerçekten anlamlı değil.


-2

SO'da çok daha iyi cevaplar var . Temel olarak, bazı veri toplama ve aramak için kriterler sağlar. Ses algoritması sizi yalnızca ölçütlere uyan balıkları yakalar, ancak bazı veri öğelerini kaçırabilir. Tam bir algoritma , istenen sonuçların bir üst kümesini oluşturur; bu, istenen sonuçların üzerine biraz çöp attığınız anlamına gelir. Ses algoritması daha muhafazakardır.

İstatistikçiler muhtemelen ses algoritmasının tip I hatalarına karşı yanlı olduğunu (IDA'yı doğru kabul etmeyen), tam algoritmanın tip II hatalarına (yanlış adayları kabul etmek için) önyargılı olduğunu söyler .

görüntü tanımını buraya girin

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.