Đây là một cách tiếp cận khác nhau, dựa trên việc tìm kiếm các số không thể xuất hiện giữa . Gọi một tập một quá xấp xỉ của 's nếu chúng ta biết rằng . Tương tự, là một overapproximation của 's nếu chúng ta biết rằng . Rõ ràng, càng nhỏ thì sự gần đúng quá mức này càng hữu ích và . Cách tiếp cận của tôi dựa trên việc lặp đi lặp lại tinh chỉnh các giá trị gần đúng này, nghĩa là lặp đi lặp lại giảm kích thước của các bộ này (vì chúng tôi loại trừ càng nhiều giá trị càng tốt).Một một { một 1 , ... , một 6 } ⊆ A B b { b 1 , ... , b 6 } ⊆ B Một B{a1,…,a6}Aa{a1,…,a6}⊆ABb{b1,…,b6}⊆BAB
Cốt lõi của phương pháp này là một phương pháp cho tinh tế : cho trước một quá xấp xỉ cho 's và một quá xấp xỉ cho ' s, hãy tìm một quá xấp xỉ mới cho 's sao cho . Cụ thể, thông thường sẽ nhỏ hơn , vì vậy điều này cho phép chúng tôi tinh chỉnh xấp xỉ quá mức cho các .một B b A * một Một * ⊊ Một Một * Một mộtAaBbA∗aA∗⊊AA∗Aa
Bằng cách đối xứng, về cơ bản, cùng một mẹo sẽ cho phép chúng tôi tinh chỉnh mức xấp xỉ quá mức của chúng tôi cho 's: đưa ra một xấp xỉ gần đúng cho và một xấp xỉ gần đúng cho , nó sẽ tạo ra một kết quả mới -appro xấp xỉ cho 's.A a B b B ∗ bbAaBbB∗b
Vì vậy, hãy để tôi cho bạn biết cách tinh chỉnh, sau đó tôi sẽ kết hợp mọi thứ lại với nhau để có được thuật toán đầy đủ cho vấn đề này. Trong phần tiếp theo, hãy để biểu thị nhiều tập hợp khác nhau, nghĩa là, ; chúng tôi sẽ tập trung vào việc tìm kiếm một tinh quá xấp xỉ , do .D = { một i - b j : 1 ≤ i , j ≤ 6 } Một * Một , BDD={ai−bj:1≤i,j≤6}A∗A,B
Làm thế nào để tính toán một sàng lọc. Hãy xem xét một sự khác biệt duy nhất . Xét tập hợp . Dựa trên kiến thức của chúng tôi rằng là một xấp xỉ quá mức của , chúng tôi biết rằng ít nhất một phần tử của phải là một phần tử của . Do đó, chúng ta có thể đối xử với nhau của các yếu tố trong như là một "gợi ý" cho một số để có thể bao gồm trong . Vì vậy, hãy quét qua tất cả các khác biệt và, với mỗi số, hãy xác định những số nào được "gợi ý" bởi .d + B = { d + y : y ∈ B } B b d + B { a 1 , Lọ , a 6 } d + B A d ∈ D dd∈Dd+B={d+y:y∈B}Bbd+B{a1,…,a6}d+BAd∈Dd
Bây giờ tôi sẽ quan sát rằng số chắc chắn sẽ được đề xuất ít nhất 6 lần trong quá trình này. Tại sao? Vì sự khác biệt là ở và khi chúng tôi xử lý nó, sẽ là một trong những con số mà nó gợi ý (vì chúng tôi đảm bảo rằng , chắc chắn sẽ bao gồm ). Tương tự, sự khác biệt xuất hiện ở đâu đó trong và nó sẽ khiến được đề xuất lại. Theo cách này, chúng tôi thấy rằng giá trị chính xác của sẽ được đề xuất ít nhất 6 lần. Điều tương tự giữ cho vàa 1 - b 1 D a 1 b 1 ∈ B ( a 1 - b 1 ) + B a 1 a 1 - b 2 D a 1 a 1 a 2 a 3a1a1−b1Da1b1∈B(a1−b1)+Ba1a1−b2Da1a1a2a3, v.v.
Vì vậy, hãy để là tập hợp các số đã được đề xuất ít nhất 6 lần. Điều này chắc chắn là một sự gần đúng quá mức của các , bởi các ý kiến trên.một * mộtA∗a∗a
Là một tối ưu hóa, chúng ta có thể lọc ra tất cả ý kiến cho rằng không có mặt trong ngay lập tức: nói cách khác, chúng ta có thể đối xử với sự khác biệt như cho thấy tất cả các giá trị . Đảm bảo này chúng ta sẽ có . Chúng tôi hy vọng rằng nhỏ hơn ; không đảm bảo, nhưng nếu mọi việc suôn sẻ, có thể nó sẽ được.d ( d + B ) ∩ Một Một * ⊆ Một Một * MộtAd(d+B)∩AA∗⊆AA∗A
Đặt điều này lại với nhau, thuật toán tinh chỉnh để mang lại như sau:Một *A,BA∗
Hãy . Đây là tập hợp nhiều gợi ý.S=∪d∈D(d+B)∩A
Đếm bao nhiêu lần mỗi giá trị xuất hiện trong . Hãy là tập hợp các giá trị xuất hiện ít nhất 6 lần trong . (Điều này có thể được thực hiện một cách hiệu quả bằng cách xây dựng một mảng của 251 ban đầu, ban đầu tất cả bằng không, và mỗi lần số được đề nghị, bạn tăng ; ở cuối bạn quét qua tìm kiếm các yếu tố có giá trị là 6 hoặc lớn hơn)A ∗ S a s a [ s ] aSA∗Sasa[s]a
Một phương pháp tương tự có thể được xây dựng để tinh chỉnh để lấy . Bạn điều cơ bản ngược trên và lật một số dấu hiệu: ví dụ, thay vì , bạn nhìn vào .B * d + B - d + MộtA,BB∗d+B−d+A
Làm thế nào để tính toán một xấp xỉ ban đầu. Để có được xấp xỉ quá mức ban đầu của chúng tôi, một ý tưởng là giả định (wlog) rằng . Nó sau đó mỗi giá trị phải xuất hiện ở đâu đó trong , do đó danh sách các khác biệt có thể được sử dụng như ban đầu quá xấp xỉ của chúng tôi cho 's. Thật không may, điều này không cung cấp cho chúng tôi một phép tính gần đúng rất hữu ích cho các .a i D D a bb1=0aiDDab
Một cách tiếp cận tốt hơn là để đoán thêm giá trị của một trong những 's. Nói cách khác, chúng tôi giả sử (wlog) rằng và sử dụng làm giá trị gần đúng ban đầu của chúng tôi đối với các . Sau đó, chúng tôi đoán đó là một trong những giá trị 36 thực sự là một trong những 's, nói . Điều đó sau đó mang lại cho chúng ta một xấp xỉ quá mức cho các . Chúng tôi sử dụng xấp xỉ gần đúng ban đầu này , sau đó lặp lại tinh chỉnh cho đến khi hội tụ và kiểm tra xem kết quả có đúng không. Chúng tôi lặp lại tới 36 lần, với 36 lần đoán khác nhau ở (trung bình 6 lần đoán là đủ) cho đến khi chúng tôi tìm thấy một lần hoạt động.b 1 = 0 A = D a a a 1 B = a 1 - D b A , B a 1ab1=0A=Daaa1B=a1−DbA,Ba1
Một thuật toán đầy đủ. Bây giờ chúng ta có thể có một thuật toán đầy đủ để tính . Về cơ bản, chúng tôi rút ra một xấp xỉ quá mức ban đầu cho và , sau đó lặp lại tinh chỉnh. Một Ba1,…,a6,b1,…,b6AB
Đoán: Với mỗi , hãy đoán rằng . Làm như sau:a 1 = zz∈Da1=z
Xấp xỉ quá mức ban đầu: Xác định và .B = z - DA=DB=z−D
Lặp lại tinh chỉnh: Áp dụng nhiều lần sau đây cho đến khi hội tụ:
- Tinh chỉnh để có được một xấp xỉ của .B ∗ bA,BB∗b
- Tinh chỉnh để có được xấp xỉ của 's.A ∗ aA,B∗A∗a
- Đặt và . B : = B *A:=A∗B:=B∗
Kiểm tra thành công: Nếu các bộ kết quả mỗi bộ có kích thước 6, hãy kiểm tra xem chúng có phải là giải pháp hợp lệ cho vấn đề không. Nếu có, dừng lại. Nếu không, tiếp tục với vòng lặp trên các giá trị ứng cử viên của .zA,Bz
Phân tích.
Điều này sẽ làm việc? Cuối cùng nó sẽ hội tụ vào và , hay nó sẽ bị kẹt mà không giải quyết được hoàn toàn vấn đề? Cách tốt nhất để tìm hiểu có lẽ là để kiểm tra nó. Tuy nhiên, đối với các thông số của bạn, vâng, tôi hy vọng nó sẽ có hiệu quả.B = { b 1 , ... , b 6 }A={a1,…,a6}B={b1,…,b6}
Nếu chúng ta sử dụng phương pháp # 1, miễn làkhông quá lớn, theo kinh nghiệm, tôi hy vọng kích thước của các bộ sẽ co lại một cách đơn điệu. Xem xét bắt nguồn từ . Mỗi khác biệt gợi ýcác giá trị; một trong số chúng đúng và cái còn lại có thể được coi (theo kinh nghiệm) là số ngẫu nhiên. Nếu là một số không xuất hiện trong số , thì xác suất để nó tồn tại trong quá trình lọc và được thêm vào bao nhiêu? Vâng, chúng tôi hy vọng để được gợi ý về|A|,|B|A∗A,Bd|B||B|−1xaA∗a(|B|−1)×36/251tổng số lần (trung bình, với độ lệch chuẩn về căn bậc hai của số đó). Nếu , xác suất sai tồn tại trong quá trình lọc phải là khoảng hoặc hơn (sử dụng xấp xỉ bình thường cho nhị thức, với hiệu chỉnh liên tục). (Xác suất là nhỏ hơn nếu nhỏ; ví dụ, đối với , tôi mong đợi .) Tôi hy vọng quy mô của vào khoảng , sẽ cải thiện nghiêm ngặt mức gần đúng vì nó nhỏ hơn hoàn toàn so với. Chẳng hạn, nếu , thì dựa trên các phương pháp phỏng đoán này mà tôi mong đợi|B|≤36xp=0.4|B||B|=30p≈0.25A∗| Một | | Một | = | B | = 36 | Một * | ≈ 18 | Một |p(|A|−6)+6|A||A|=|B|=36|A∗|≈18 , đó là một cải tiến lớn so với.|A|
Do đó, tôi dự đoán rằng thời gian chạy sẽ rất nhanh. Tôi hy vọng khoảng 3-5 lần tinh chỉnh là đủ để hội tụ, thông thường, và khoảng 6 lần đoán tại có lẽ là đủ. Mỗi hoạt động sàng lọc liên quan đến có thể vài nghìn bộ nhớ đọc / ghi và chúng tôi làm điều đó có thể 20-30 lần. Vì vậy, tôi hy vọng điều này sẽ rất nhanh, cho các tham số bạn đã chỉ định. Tuy nhiên, cách duy nhất để tìm hiểu chắc chắn là dùng thử và xem nó có hoạt động tốt hay không.z