Contoh algoritme dan bukti yang tampaknya benar, tetapi tidak

15

Dalam kursus pengantar saya untuk pemrograman, kita belajar tentang metode Inisialisasi-Pemeliharaan-Pemutusan untuk membuktikan suatu algoritma melakukan apa yang kita harapkan. Tapi kami hanya perlu membuktikan bahwa suatu algoritma yang sudah diketahui benar, benar. Kami tidak pernah diminta untuk menunjukkan bahwa suatu algoritma tidak benar.

Apakah ada contoh algoritma klasik yang terlihat benar, tetapi tidak? Saya mencari kasus-kasus di mana pendekatan Inisialisasi-Pemeliharaan-Pengakhiran menangkap sesuatu yang intuisi pandangan pertama tidak.

Marin
sumber
5
Mungkin menarik: cs.stackexchange.com/q/29475/755
DW
5
Upvoting karena saya pikir ini adalah pertanyaan pedagogi yang sangat penting. Ini sedikit di luar ruang lingkup untuk cstheory, tapi saya tidak tahu platform yang lebih baik untuk itu, dan ada banyak instruktur algoritma di komunitas cstheory. Sebagian besar kursus desain algoritma mengekspos siswa hanya untuk memperbaiki, algoritma yang ada dan masalah yang mudah dipecahkan dengan menggunakan teknik yang dikenal. Ini memperkuat kesan, sangat menarik bagi siswa, sehingga seseorang dapat dengan aman mempercayai perasaan intuitif seseorang bahwa algoritma yang tampaknya masuk akal itu benar. Tentu saja algoritma-desain yang baik harus melakukan yang sebaliknya!
Neal Young
3
Saya ingin sekali memiliki koleksi seperti ini.
Chandra Chekuri

Jawaban:

20

Maksimum lokal 2D

n×nA

(i,j)A[i,j]

A[i,j+1],A[i,j1],A[i1,j],A[i+1,j]A

0134323125014013

maka setiap sel yang dicetak tebal adalah maksimum lokal. Setiap array yang tidak kosong memiliki setidaknya satu maksimum lokal.

O(n2)

AXXA(i,j)X(i,j)(i,j)

AXAX(i,j)A

AA

(i,j)AA(i,j)

n2×n2A(i,j)

T(n)n×nT(n)=T(n/2)+O(n)T(n)=O(n)

Dengan demikian, kami telah membuktikan teorema berikut:

O(n)n×n

Atau sudahkah kita?

Neal Young
sumber
Pada bacaan pertama, satu-satunya kesalahan yang saya temukan adalah solusi pengulangan. Apakah itu satu-satunya kesalahan?
Radu GRIGore
1
Perulangannya benar. Algoritma tidak!
Neal Young
1
Ah, ya, saya membuat kesalahan bodoh dengan pengulangan. Saya melihat masalah: maksimum yang Anda buktikan tidak ada (tentu) apa yang Anda temukan. Dan apa yang Anda temukan mengabaikan X.
Radu GRIGore
3
(2143300101230001023002222222333233300323000032300)
2
AA