Oto inne podejście, oparte na iteracyjnym wyszukiwaniu liczb, które nie mogą pojawić się w . Nazywamy zbiorem nadmierne przybliżenie „s, jeśli wiemy, że . Podobnie, jest overapproximation z „s, jeśli wiemy, że . Oczywiście mniejszy{a1,…,a6}Aa{a1,…,a6}⊆ABb{b1,…,b6}⊆BA , tym bardziej użyteczne to nadmierne przybliżenie jest i to samo dotyczy . Moje podejście opiera się na iteracyjnym udoskonalaniu tych nadmiernych przybliżeń, tj. Iteracyjnym zmniejszaniu rozmiaru tych zbiorów (ponieważ wykluczamy coraz więcej wartości jako niemożliwych).B
Zasadniczą cechą tego rozwiązania jest sposób udoskonalenia : podany nadmierne przybliżenie dla „S nadmierne przybliżenie do ” s, znalezienie nowego nadmiernej aproksymacji do jest taki, że . W szczególności normalnie będzie mniejsza niż , więc to pozwala nam udoskonalić nadmiernej Przybliżony „s.AaBbA∗aA∗⊊AA∗Aa
Przez symetrii zasadniczo taka sama sztuczka pozwoli nam udoskonalić nasze nadmiernej Przybliżony „s: podany nadmierne zbliżanie dla ” ów i nadmierne zbliżanie do „s, będzie produkować nowy ponad - przybliżenie dla .bAaBbB∗b
Więc pozwól, że powiem ci, jak udoskonalić, a następnie połączę wszystko, aby uzyskać pełny algorytm dla tego problemu. W poniższym przykładzie niech oznacza zbiór różnic, tzn. ; skupimy się na znalezieniu wyrafinowanego nadmiernego przybliżeniaDD={ai−bj:1≤i,j≤6}A∗ , zważywszy .A,B
Jak obliczyć udoskonalenie. Rozważmy jeden różnicy . Rozważmy zestaw . W oparciu o naszą wiedzę, że jest nadmiernym przybliżeniem , wiemy, że co najmniej jeden element musi być elementem . W związku z tym można traktować każdy z elementów jako „sugestii” po numer może zawierać w . Prześledźmy więc wszystkie różnice i, dla każdej, określ, które liczby są „sugerowane” przez .d∈Dd+B={d+y:y∈B}Bbd+B{a1,…,a6}d+BAd∈Dd
Teraz zauważę, że liczba pewnością zostanie zasugerowana co najmniej 6 razy podczas tego procesu. Dlaczego? Ponieważ różnica występuje w , a kiedy ją przetworzymy, będzie jedną z sugerowanych przez nią liczb (ponieważ mamy gwarancję, że , z pewnością będzie zawierać ). Podobnie różnica pojawia się gdzieś w i spowoduje ponowne zasugerowanie . W ten sposób widzimy, że poprawna wartośća1a1−b1Da1b1∈B(a1−b1)+Ba1a1−b2Da1a1 zostanie zasugerowana co najmniej 6 razy. To samo dotyczy ia2a3, i tak dalej.
Niech będzie zbiorem liczbA∗a∗ , które zostały zasugerowane co najmniej 6 razy. To z pewnością będzie nadmierne przybliżenie „s, w powyższych komentarzach.a
Jako optymalizacji, możemy odfiltrować wszystkie propozycje, które nie są obecne w natychmiast: innymi słowy, możemy traktować różnicę jak sugeruje wszystkie wartości . Gwarantuje to, że będziemy musieli . Mamy nadzieję, że jest ściśle mniejsze niżAd(d+B)∩AA∗⊆AA∗A ; żadnych gwarancji, ale jeśli wszystko pójdzie dobrze, może tak będzie.
Podsumowując, algorytm udoskonalenia dajeA,BA∗ jest następujący:
Niech . To jest zestaw sugestii.S=∪d∈D(d+B)∩A
Policz, ile razy pojawia się każda wartość w . Niech oznacza zbiór wartości, które są w co najmniej 6 razy w . (Może to być realizowane skutecznie budując tablicę z 251 na początku, początkowo wszystkie zera, i za każdym razem liczba jest sugerowane, to przyrost ; na koniec zamiatać przez szuka elementów, których wartość wynosi 6 lub większy)SA∗Sasa[s]a
Podobną metodę można zbudować w celu udoskonalenia celu uzyskania . W zasadzie odwrotnej rzeczy powyżej odwrócić pewne oznaki: np zamiast , obejrzysz .A,BB∗d+B−d+A
Jak obliczyć początkowe przekroczenie przybliżenia. Aby uzyskać nasze wstępne przybliżenie, jednym z pomysłów jest założenie (wlog), że . Wynika stąd, że każda wartość musi pojawić się gdzieś między , stąd listę różnic mogą być stosowane jako naszego początkowego nadmiernego zbliżenia dla tych. Niestety, nie daje to nam bardzo przydatnego przesadnego przybliżenia wartości .b1=0aiDDab
Lepszym podejściem jest dodatkowe odgadnięcie wartości jednego z „a”. Innymi słowy, zakładamy (wlog), które i używać jako naszego początkowego nadmiernego zbliżenia „s. Następnie możemy odgadnąć, która z tych wartości jest 36 rzeczywiście jeden z „s, powiedzmy . To daje nam w przybliżeniu dla . Używamy tego wstępnego przeszacowania , a następnie iteracyjnie dopracowujemy go do zbieżności i sprawdzamy, czy wynik jest poprawny. Powtarzamy do 36 razy, z 36 różnymi przypuszczeniami na (średnio powinno wystarczyć 6 domysłów), aż znajdziemy taki, który działa.ab1=0A=Daaa1B=a1−DbA,Ba1
Pełny algorytm. Teraz możemy mieć pełny algorytm do obliczania . Zasadniczo wyprowadzamy wstępne przybliżenie dla i , a następnie iteracyjnie udoskonalamy.a1,…,a6,b1,…,b6AB
Zgadnij: Dla każdego zgadnij, że . Wykonaj następujące czynności:z∈Da1=z
Początkowe : zdefiniuj i .A=DB=z−D
Udoskonalenie iteracyjne: Powtarzaj kolejno następujące czynności aż do zbieżności:
- Popraw aby uzyskać nowe przybliżenie z .A,BB∗b
- Popraw aby uzyskać nowe przybliżenie dlaA,B∗A∗a „s.
- Niech i .A:=A∗B:=B∗
Sprawdź sukces: jeśli każdy z wynikowych zestawów ma rozmiar 6, sprawdź , czy są one poprawnym rozwiązaniem problemu. Jeśli tak, przestań. Jeśli nie, przejdź do pętli nad wartościami kandydującymi .A,Bz
Analiza.
Czy to zadziała? Czy ostatecznie zbiegnie się w iA={a1,…,a6}B={b1,…,b6} , czy utknie bez całkowitego rozwiązania problemu? Najlepszym sposobem na sprawdzenie tego jest prawdopodobnie przetestowanie go. Jednak dla twoich parametrów, tak, spodziewam się, że będzie skuteczny.
Jeśli użyjemy metody nr 1, o ilenie są zbyt duże, heurystycznie spodziewam się, że rozmiary zestawów zmniejszą się monotonicznie. Rozważmy wyprowadzania z . Każda różnica sugerujewartości; jeden z nich jest poprawny, a drugi można traktować (heurystycznie) jako liczby losowe. Jeśli jest liczbą, która nie pojawia się wśród „s, jakie jest prawdopodobieństwo, że przeżyje filtrowanie i dodano do ? Spodziewamy sugestii dotyczącej|A|,|B|A∗A,Bd|B||B|−1xaA∗a(|B|−1)×36/251razy ogółem (średnio przy standardowym odchyleniu o pierwiastek kwadratowy z tego). Jeśli , prawdopodobieństwo, że niepoprawne. Na przykład, jeśli , to na podstawie tych heurystyk oczekuję|B|≤36x przetrwa filtrowanie powinno wynosić około lub więcej (przy użyciu normalnego przybliżenia dla dwumianu, z korektą ciągłości). (Prawdopodobieństwo jest mniejsze, jeśli jest mniejsze; np. Dla , spodziewam się .) Spodziewam się, że rozmiar będzie około , co zdecydowanie poprawi nadmierne zbliżenie, ponieważ jest ono ściśle mniejsze niżp=0.4|B||B|=30p≈0.25A∗p(|A|−6)+6|A||A|=|B|=36|A∗|≈18 , co stanowi dużą poprawę w stosunku do.|A|
Dlatego przewiduję, że czas działania będzie bardzo szybki. Spodziewam się, że około 3-5 iteracji udoskonalenia będzie wystarczających do konwergencji, a zwykle około 6 domysłów w punkcie powinno prawdopodobnie wystarczyć. Każda operacja udoskonalania obejmuje może kilka tysięcy odczytów / zapisów w pamięci, a robimy to może 20-30 razy. Oczekuję więc, że będzie to bardzo szybkie, jak na określone parametry. Jednak jedynym sposobem, aby się przekonać, jest wypróbowanie go i sprawdzenie, czy działa dobrze, czy nie.z