Đặt là DAG. Chúng tôi biết rằng một số nút trong là "xấu", trong khi các nút khác là "tốt"; hậu duệ của một nút xấu là xấu trong khi tổ tiên của một nút tốt là tốt. Chúng tôi cũng biết rằng các nút xấu có một phần tử tối thiểu duy nhất trong G mà chúng tôi muốn tìm truy vấn càng ít nút càng tốt với các truy vấn thuộc loại "Bạn tốt hay xấu?".G
Vấn đề này được giải quyết trong Git, hệ thống kiểm soát phiên bản phổ biến, bằng lệnh git-bisect
, giúp lập trình viên tìm ra cam kết đầu tiên trong đó một lỗi được đưa ra.
Khi bắt đầu, thuật toán được thực hiện bởi Git giả định phải biết một cam kết xấu duy nhất và một hoặc nhiều cam kết tốt. Ở mỗi bước thực hiện, thuật toán tìm thấy một cam kết sử dụng các bước sau (lấy từ đây ):
Chỉ giữ lại các cam kết rằng:
a) là tổ tiên của cam kết xấu (bao gồm cả chính cam kết xấu) và
b) không phải là tổ tiên của một cam kết tốt (không bao gồm các cam kết tốt).
Bắt đầu từ kết thúc tốt đẹp của biểu đồ kết quả, liên kết với mỗi cam kết số lượng tổ tiên mà nó có cộng với một.
Liên kết với mỗi cam kết , trong đó là giá trị được liên kết với cam kết trong bước 2 và là tổng số lần xác nhận trong biểu đồ (sau khi giảm ở bước 1).
Điểm chia nhỏ tốt nhất là cam kết có số lượng liên kết cao nhất.
Thuật toán này về cơ bản là tìm ra cam kết đạt được "trường hợp tốt nhất tồi tệ nhất": trên thực tế, là số nút trong DAG ở lần lặp tiếp theo trong trường hợp tốt nhất, do đó là trường hợp tốt nhất tồi tệ nhất.
Tôi tự hỏi:
- Liệu nó có khác biệt gì không nếu chúng ta chọn "trường hợp xấu nhất tốt nhất", nghĩa là nút đạt được ?
- Là thuật toán này trường hợp xấu nhất tối ưu?
EDIT: Tôi đã nhận thấy rằng vấn đề này có ràng buộc . Hãy xem xét DAG được hình thành bởi một nút với cha mẹ được gọi là . Nếu chúng ta biết rằng là xấu thì chúng ta phải kiểm tra từng cha mẹ để xem họ có phải là nút xấu tối thiểu không.
EDIT 2: Cái trước thực sự là một ràng buộc , trong đó là chiều rộng của poset. Một thuật toán thay thế cho vấn đề này được đưa ra trong câu trả lời này trên cstheory.stackexchange sử dụng các truy vấn .