Tổng quát hóa tìm kiếm nhị phân cho posets?


28

Giả sử tôi có một vị trí "S" và một vị từ đơn điệu "P" trên S. Tôi muốn tìm một hoặc tất cả các phần tử tối đa của S thỏa mãn P.

EDIT : Tôi quan tâm đến việc giảm thiểu số lượng đánh giá của P .

Những thuật toán nào tồn tại cho vấn đề này và những thuộc tính và hoạt động bổ sung nào chúng yêu cầu trên S?

Điều gì về các trường hợp đặc biệt quan trọng, chẳng hạn như:

  • S là một thứ tự tuyến tính - sau đó tìm kiếm nhị phân thông thường hoạt động, miễn là bạn có thao tác "tìm giữa"
  • S là một mạng tinh thể
  • S là một mạng con
  • S là một mạng nhiều lớp
  • ...

Hai trường hợp sau có vẻ đặc biệt quan trọng, ví dụ như đối với thiết kế thử nghiệm - bạn có một tập hợp các tham số boolean hoặc thực và bạn muốn tìm sự kết hợp nhỏ nhất có thể của chúng để tái tạo một mẫu cụ thể (ví dụ: thử nghiệm thất bại).


1
Mạng 'multiset' là gì?
Suresh Venkat

1
Đó là mạng có các phần tử là ánh xạ X -> N, đáp ứng là phần tử tối thiểu và tham gia là phần tử tối đa. Nó có thể được khái quát cho bất kỳ mạng nào thay vì N là tên miền.
jkff

Câu trả lời:


15

Tôi đã không nghĩ điều này qua rất nhiều, vì vậy xin vui lòng sửa cho tôi nếu tôi sai.

Nói là chiều rộng của poset.w

  1. Đối với poset mà là sự kết hợp của chuỗi rời nhau bạn cần ít nhất đánh giá của bằng cách chỉ áp dụng các tiêu chuẩn thấp hơn bị ràng buộc vào sự phức tạp của truy vấn tìm kiếm nhị phân cho mỗi chuỗi.wwlognP

  2. Vì bạn đưa ra so sánh miễn phí, bạn có thể tính toán phân tách chuỗi của poset thành chuỗi miễn phí. Làm tìm kiếm nhị phân trên mỗi chuỗi để xác định các yếu tố đầu tiên mà thỏa mãn . Sau đó đi qua các yếu tố được xác định và loại bỏ bất kỳ yếu tố chi phối. Số lượng đánh giá của là . Điều này xác định tất cả các yếu tố tối đa, vì có thể có nhiều nhất một yếu tố tối đa trên mỗi chuỗi.wPPO(wlogn)


THÊM: Trên thực tế tôi đang thấy một thuật toán đệ quy đơn giản để làm tốt hơn nhiều ( ) cho mạng các tập con 2 [ n ] ( EDIT : domotor mô tả chiến lược chung trong câu trả lời của anh ấy). Ở đây tôi giả sử P là đơn điệu hướng xuống (tức là các tập con { X : P ( X ) = 1 } tạo thành một tập hợp thấp hơn), đó là ý tôi muốn nói. Vì vậy, đây là thuật toán để tìm một thành viên của tập hợp thấp hơn:O(n)2[n]P{X:P(X)=1}

a) Kiểm tra . Nếu 0 thì dừng lại.P()

b) Kiểm tra . P({n})

bi) Nếu 0, sau đó lặp lại trên (OK, vì không có tập hợp nào chứa có thể nằm trong tập thấp hơn).2[n1]n

b.ii) Nếu 1, thì tồn tại một thành viên của tập hợp thấp hơn trong mạng con . Mạng con này là đẳng cấu đến nên một lần nữa chúng ta có thể lặp lại. Chính xác hơn, chúng ta có thể chạy thuật toán cho , nhưng khi thuật toán yêu cầu đánh giá , chúng ta đánh giá trong đó .{X:nX}2[n1]2[n1]P(Y)P(X)X=Y{n}

Vì vậy, trong mỗi bước, chúng tôi lặp lại trên một phân lớp có kích thước bằng một nửa so với ban đầu. Nhìn chung, chúng ta cần đánh giá tối đa lần (thực tế bạn có thể thực hiện thuật toán để đánh giá vị từ lần như Yoshio chỉ ra, vì bạn chỉ cần kiểm tra một lần).2 n n + 1 P2nn+1


Wow, một ý tưởng đơn giản như vậy! Cảm ơn - Tôi sẽ suy nghĩ xem liệu điều này có vẻ tối ưu hay không :)
jkff

Nó thực sự thậm chí còn ít hơn w log n, vì tổng độ dài chuỗi là n. Tôi đoán tối đa là khoảng w log (n / w).
jkff

OK, đối với các đơn hàng tuyến tính, điều này cho phép tìm kiếm nhị phân, đối với một mạng con tập hợp này sẽ cung cấp nhật ký C (n, n / 2) (2 ^ n / C (n, n / 2)) ~ exp (n) * n. Không quá nhanh, nhưng cũng không quá tối ưu, vì thực sự có thể có nhiều câu trả lời. Tuy nhiên, để tìm một tập hợp con tối đa, bạn cần tìm kiếm nhị phân trên bất kỳ một chuỗi nào - điều này thật tuyệt và bây giờ tôi tự gọi mình là ngu ngốc vì không nghĩ về nó. Cảm ơn một lần nữa!
jkff

2
Tôi nghĩ rằng các chuỗi disjoint cung cấp cho bạn giới hạn thấp hơn ít nhất là w + log n (đối với các thuật toán xác định). Hãy nghĩ về một kẻ thù "che giấu" một giải pháp duy nhất trong chuỗi cuối cùng được yêu cầu. Một giới hạn dưới ngẫu nhiên của Ω ( w ) phải tuân theo nguyên tắc minimax của Yao. Tìm một phần tử duy nhất có độ phức tạp w + log n có thể thú vị. ww+lognΩ(w)w+logn
Sasho Nikolov

1
@YanKingYin Một mạng tinh thể không thể là sự kết hợp của (nhiều hơn một) chuỗi rời rạc, bởi vì mỗi hai yếu tố phải có một tối cao. Một poset là một tập hợp các chuỗi rời rạc nếu nó có thể được phân vùng để các phần tử từ các phần khác nhau là không thể so sánh được và các phần tử trong cùng một phần thừa nhận tổng thứ tự.
Sasho Nikolov


8

Một bài báo gần đây của Daskalakis et al cho thấy rằng đối với một vị trí có kích thước và chiều rộng w , các phần tử tối thiểu có thể được tìm thấy trong thời gian O ( w n ) . Điều thú vị là trong bản tóm tắt của họ, họ nóinwO(wn)

Cũng rất thú vị khi tìm thấy các cấu trúc dữ liệu tĩnh và động hiệu quả, đóng vai trò tương tự đối với các đơn hàng một phần mà các đống tìm kiếm và cây tìm kiếm nhị phân đóng cho tổng số đơn đặt hàng.


Heh, âm thanh không quá truyền cảm so với log (n) :) nhưng dù sao cũng cảm ơn!
jkff

Nhưng đó là điểm chính. Nếu không có cấu trúc dữ liệu, bạn không thể nhận được log n ngay cả đối với tập hoàn toàn được đặt, bởi vì tất cả những gì bạn có thể làm là quét. Đây thực sự là một câu hỏi hay để thử và tìm BST tương đương.
Suresh Venkat

Chà - tôi đang nói về sự phức tạp về số lượng các đánh giá của vị từ P, không phải là vị từ so sánh.
jkff

1
Theo một nghĩa nào đó, nhưng đó không phải là câu trả lời hoàn chỉnh - ví dụ: nó không đưa ra sự phân chia cho các trường hợp 1d hoặc 2d :) bạn đề nghị làm gì với gốc rễ?
jkff

1
Chưa chắc lắm. nghi tới điều to lớn. Nhưng đó là một câu hỏi xuất sắc.
Suresh Venkat

4

x<y

Ngoài ra, có thể có nhiều yếu tố tối đa thỏa mãn P, do đó, ngay cả để xuất ra tất cả chúng có thể mất nhiều thời gian, vì vậy tôi nghĩ chỉ có hy vọng tìm được một mức tối đa.

Nói chung, tìm kiếm nhị phân hoạt động nếu bạn có thể chọn đệ quy các phần tử sao cho sau khi bạn để lại các phần tử trên hoặc các phần tử trên bị xóa và trong mỗi bộ như vậy, tỷ lệ cố định của các phần tử sẽ bị xóa.

Ví dụ. nếu S là một lưới chiều cố định, thì có một thuật toán nhanh: Luôn giảm một nửa tọa độ trong khi giữ cho các tọa độ khác ở mức tối thiểu, vì vậy hãy hỏi ví dụ trong bước đầu tiên (n / 2.0, ..., 0).

nd


Tôi sợ tôi không hiểu đoạn đầu tiên. Trong phần rút gọn của bạn, bạn có tất cả các chuỗi n-bit trong vị trí S và chúng có được đưa vào như một phần của đầu vào không? Nếu vậy, chúng ta có thể đi qua tất cả các chuỗi trong thời gian đa thức.
Yoshio Okamoto

1
@YoshioOkamoto: Tôi nghĩ rằng giả định trong đoạn đó là sự so sánh trong S được đưa ra dưới dạng mạch Boolean. (Nhưng điều đó không liên quan gì đến việc tìm kiếm trong một tư thế và do đó không thú vị đối với tôi.)
Tsuyoshi Ito

@Tsuyoshi: Cảm ơn bạn. Điều đó làm cho rất nhiều ý nghĩa.
Yoshio Okamoto 11/11/11

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.