Forum jest zablokowane. Podczas blokady nie można dodawać ani edytować wiadomości.
Temat: [DAG] Fibonacci
Zrobił ktoś to zadanko z drabinką w formie:
2 3
3 4
4 5
5 6
6 7
....
która dawała kolejne liczby Fibonacciego? Powinno to dać max koło 66 węzłów.
Standardowe podejście binarne z drabinką w formie:
2 3
4 5
4 5
6 7
6 7
....
lub:
2 3
3 -1
4 5
5 -1
6 7
7 -1
....
mi dało 88 węzłów w najgorszym przypadku (2^30-1-2^27).
2 3
3 4
4 5
5 6
6 7
....
która dawała kolejne liczby Fibonacciego? Powinno to dać max koło 66 węzłów.
Standardowe podejście binarne z drabinką w formie:
2 3
4 5
4 5
6 7
6 7
....
lub:
2 3
3 -1
4 5
5 -1
6 7
7 -1
....
mi dało 88 węzłów w najgorszym przypadku (2^30-1-2^27).
Ja zrobiłem z ciągiem fibbonacciego, po jednym węźle na liczbę ciągu fib. (aż do największej mniejszej od 'k') + po dodatkowej na każdy zapalony bit w zapisie jako suma elementów ciągu fib.
Moje podejście "binarne" daje co najwyżej 60 węzłów (2*(log-1)+2) = 2*29+2.
2 3
3 (jeśli 1. bit zapalony, połącz z ostatnim wierzchołkiem; w przeciwnym wypadku -1)
4 5
5 (jeśli 2. bit zapalony, połącz z ostatnim wierzchołkiem; w przeciwnym wypadku -1)
7 8
8 (jeśli 3. bit zapalony, połącz z ostatnim wierzchołkiem; w przeciwnym wypadku -1)
...
itd.
Dla k = 5, dałoby to następujący graf
6
2 3
3 6
4 5
5 -1
6 -1
-1 -1
2 3
3 (jeśli 1. bit zapalony, połącz z ostatnim wierzchołkiem; w przeciwnym wypadku -1)
4 5
5 (jeśli 2. bit zapalony, połącz z ostatnim wierzchołkiem; w przeciwnym wypadku -1)
7 8
8 (jeśli 3. bit zapalony, połącz z ostatnim wierzchołkiem; w przeciwnym wypadku -1)
...
itd.
Dla k = 5, dałoby to następujący graf
6
2 3
3 6
4 5
5 -1
6 -1
-1 -1
Binarnie można do 60 wierzchołków zjechać.
1 => 2 3
2 => 3 A
3 => 4 5
4 => 5 B
5 => 6 7
6 => 7 C
przy czym A, B, C to albo -1 (jeśli kolejna cyfra binarnego rozwinięcia k jest 0) albo n (jeśli ta cyfra to 1)
1 => 2 3
2 => 3 A
3 => 4 5
4 => 5 B
5 => 6 7
6 => 7 C
przy czym A, B, C to albo -1 (jeśli kolejna cyfra binarnego rozwinięcia k jest 0) albo n (jeśli ta cyfra to 1)
No tak, nie pomyślałem że te -1 w przypadku drugiej drabinki binarnej można wykorzystać i nie tworzyć dodatkowych węzłów :)
Wynik 60 (+- 1) można uzyskać analizując zapis k w systemie trójkowym:
k = 3 * x + r
Dla r = 0 lub 2
1 => 2 3
2 => 3 4
3 => 4 A
A = -1 dla r = 0 oraz A = n dla r = 2
Dla r = 1
1 => 2 4
2 => 3 4
3 => 4 n
k = 3 * x + r
Dla r = 0 lub 2
1 => 2 3
2 => 3 4
3 => 4 A
A = -1 dla r = 0 oraz A = n dla r = 2
Dla r = 1
1 => 2 4
2 => 3 4
3 => 4 n
Na swoje pocieszenie dodam że wzorcówka (outy w testach) też wykorzystywała tą gęstą drabinkę binarną i dała 87 dla testu 10d, gdzie moje rozwiązanie dało 86.
Ja zrobiłem tak samo jak Szymon. Dla 10d mam 52, a najwięcej dla 10a - 57.
Dodam jeszcze, że to zadanie wyjątkowo mi się podobało. Dziękuję i jednocześnie gratuluję autorowi :)
Dla mnie to było naciekawsze zadanie z serii C. Sporo kombinowania, a już się wpadnie na pomysł to się okazuje że kod mieści się na jednym ekranie.
Dodam jeszcze, że to zadanie wyjątkowo mi się podobało. Dziękuję i jednocześnie gratuluję autorowi :)
Dla mnie to było naciekawsze zadanie z serii C. Sporo kombinowania, a już się wpadnie na pomysł to się okazuje że kod mieści się na jednym ekranie.
Czyli jednak Fibonacci górą :)
Jeszcze pytanko do tych co robili Fibonaccim. Ile macie węzłów dla 969323028? Powinien to być najgorszy przypadek.
Ja mam 64.
W takim razie rzadka drabinka binarna wygrywa, daje najwięcej 60 (od 2^28+2^29=805306368 do 2^30=1073741824). Ma tą jeszcze zaletę że ilość węzłów jest niemalejąca przy rosnącym k.
Ciekaw jestem jeszcze jaki był najgorszy przypadek dla rozwiązania trójkowego Michała Miodka.
Ciekaw jestem jeszcze jaki był najgorszy przypadek dla rozwiązania trójkowego Michała Miodka.
W rozwiązaniu trójkowym liczba węzłów też jest niemalejąca. Dla k = 10^9 wychodzi chyba dokładnie 59.
Ale co ciekawe, dla większych k drabinka trójkowa daje mniej węzłów.
Dla k = 10^18 mamy 116 węzłów w drabince trójkowej i 120 w binarnej.
Dla k = 10^100 mamy już 629 węzłów w trójkowej i 668 w binarnej.
To dowód wyższości liczby 3 nad 2 ;)
Ale co ciekawe, dla większych k drabinka trójkowa daje mniej węzłów.
Dla k = 10^18 mamy 116 węzłów w drabince trójkowej i 120 w binarnej.
Dla k = 10^100 mamy już 629 węzłów w trójkowej i 668 w binarnej.
To dowód wyższości liczby 3 nad 2 ;)
Jest chyba jeszcze lepiej: dla trójkowej drabinki mi wyszło n=57 dla k od 774840978=2*3^18 do 1162261466=3^19-1, czyli dla k=10^9 również.