Biarkan menjadi DAG. Kita tahu bahwa beberapa node dalam adalah "buruk", sementara yang lain "baik"; keturunan dari simpul buruk adalah buruk sedangkan nenek moyang dari simpul baik adalah baik. Kita juga tahu bahwa node buruk memiliki elemen minimal unik di yang ingin kami tanyakan sesedikit mungkin node dengan pertanyaan dari tipe "Apakah Anda baik atau buruk?".
Masalah ini diselesaikan di Git, sistem kontrol versi populer, dengan perintah git-bisect
, yang membantu programmer menemukan komit pertama di mana bug diperkenalkan.
Pada awalnya, algoritma yang diterapkan oleh Git mengasumsikan mengetahui satu komit buruk dan satu atau lebih komit baik. Pada setiap langkah eksekusi, algoritme menemukan komit menggunakan langkah-langkah berikut (diambil dari sini ):
Pertahankan hanya komitmen yang:
a) adalah leluhur dari komit buruk (termasuk komit buruk itu sendiri), dan
b) bukan nenek moyang dari komitmen yang baik (tidak termasuk komitmen yang baik).
Mulai dari ujung yang bagus dari grafik yang dihasilkan, kaitkan untuk setiap komit dengan jumlah leluhur yang dimilikinya ditambah satu.
Kaitkan ke setiap komit , di mana X adalah nilai yang terkait dengan komit di langkah 2, dan N adalah jumlah total komit dalam grafik (setelah dikurangi di langkah 1).
Titik pembelahan terbaik adalah komit dengan angka terkait tertinggi.
Algoritma ini pada dasarnya menemukan komit yang mencapai "kasus terbaik terburuk": pada kenyataannya, adalah jumlah node dalam DAG pada iterasi berikutnya dalam kasus terbaik, dengan demikian adalah kasus terbaik terburuk.
Aku bertanya-tanya:
- Apakah ada bedanya jika kita memilih "case terburuk terbaik", yaitu node yang mencapai ?
- Apakah algoritme terburuk ini optimal?
EDIT: Saya perhatikan bahwa masalah ini memiliki ikatan . Pertimbangkan DAG yang dibentuk oleh satu simpul dengan orang tua yang disebut . Jika kita tahu bahwa buruk maka kita harus memeriksa setiap orang tua untuk melihat apakah mereka adalah simpul buruk minimal.
EDIT 2: Yang sebelumnya sebenarnya terikat dengan , di mana adalah lebar poset. Algoritme alternatif untuk masalah ini diberikan dalam jawaban ini di cstheory.stackexchange yang menggunakan kueri .