Załóżmy, że musimy zapakować plecak na wycieczkę. Plecak ma pojemność S. Przedmioty mają objętości,,...,, których suma jest większa od S. Plecak ma być zapakowany optymalnie, tzn. bierzemy tylko te przedmioty, których objętości dają sumę najbliższą S. Co włożyć do plecaka?
Niech,,,, ) = (2, 7, 8, 11, 12) oraz S=21. Wówczas S = + + oraz S = + + Zabieramy ze sobą przedmioty 1, 3, 4 lub 1, 2, 5. Czy mamy więcej możliwości?
Czy mamy więcej możliwości? Aby odpowiedzieć na to pytanie, należy rozważyć wszystkie (32) możliwe sumy wyrazów ciągu,,,, ), lub zauważyć, że pewnych sum nie warto rozważać.
Nasz problem możemy sformułować w następującej formie. Dla danych liczb naturalnych,,..., oraz S, znajdź taki ciąg (,,..., łż, żeby zachodziła równość S. Dla ciągu z przykładu 1, 1, 0, lub 1, 0,
Zauważmy, że wszystkich ciągów,,..., jest dokładnie 2 i wszystkie przypadki należy rozważyć. Jeśli ciąg ma 100 wyrazów, a komputer, którym dysponujemy ma procesor 1GHz (czyli wykonuje 2 operacji na sekundę), to do rozważenia wszystkich przypadków będzie on potrzebował 2 sekund, czyli jakieś 37 biliardów lat.
Ciąg liczb naturalnych,,..., nazywamy szybko rosnącym, jeśli dla 2,3,...,. "#!! < " Ciąg szybko rosnący: (2, 3, 7, 14, 27).
Rozważmy szybko rosnący ciąg (2, 3, 7, 14, 27) i niech nasz plecak ma objętość S = 37. Algorytm działa na zasadzie: pakuj największy przedmiot, który się zmieści. Zgodnie z tą zasadą, pakujemy 27. Pozostaje 10 jednostek wolnej objętości. Pakujemy 7. Pozostają jeszcze 3 jednostki. Pakujemy 3 i plecak jest pełny.
Rozważmy szybko rosnący ciąg (2, 3, 7, 14, 27) i niech nasz plecak ma objętość S = 37. Zgodnie z opisana regułą, wybieramy ciąg zer i jedynek (,,,, następująco: 1, bo 27 < 37. 0, bo 14 > 37 '1 27. 1, bo 7< 37 '1 27'0 14. 1, bo 3,37 '1 27'0 14'1 7. 0, bo 2-37 '1 27'0 14'1 7'1 3.
Ogólnie, dla szybko rosnącego ciągu,,..., oraz danej liczby S bity, #,..., wyznaczamy według zasad 1,jeśli 2 3, 0,jeśli 2 4, " 1,jeśli 2' "5 3 ", " 0,jeśli 2' "5 4 ", dla 1,4.
Załóżmy, że,,..., jest ciągiem szybko rosnącym. Niech 6-2 oraz w względnie pierwsza z m. Tworzymy ciąg 7, 7,...,7 w, w,..., w mod m. Niech 2-0. Plecak oparty na 7, 7,..., 7 oraz S jest trudny, ale Plecak oparty na,,..., oraz 8 # 2jest łatwy.
Niech 7, 7, 7, 7, 7 362,54,329,236,412 oraz 2 927.,,,,?
Niech 7, 7, 7, 7, 7 362,54,329,236,412 oraz 2 927.,,,,? 6 891,8 67, stąd 8 # 133 i dalej,,,, 32,54,98,203,445 oraz 8 # 2 333. Teraz już łatwo: 0, 1, 1, 0, 1.
urodzony 2.II.1952, licencjat + magister z UC Berkeley doktorat ze Stanford W pracy doktorskiej opisał kryptosystem oparty o problem pakowania plecaka
urodzony 2.X.1945 licencjat New York University doktorat ze Stanford promotor R. Merklego
Zaczynamy od szybko rosnącego ciągu >,,..., oraz liczb 6-2 i w względnie pierwszej z m. Generujemy ciąg? 7, 7,..., 7. Kluczem szyfrującym jest B. Kluczem deszyfrującym jest (A, m, 8 #.
... czyli tworzenie trudnego plecaka 1. Litery tekstu jawnego zamieniamy na bity. 2. Tworzymy n-elementowe ciągi bitów X. 3. Obliczamy sumy 7. 4. Każdą z sum zamieniamy na blok liter.
Odpowiednik liczbowy danej litery tekstu zamieniamy z zapisu dziesiątkowego na dwójkowy, dokładnie: litera 10 2 litera 10 2 litera 10 2 A 00 00000 J 09 01001 S 18 10010 B 01 00001 K 10 01010 T 19 10011 C 02 00010 L 11 01011 U 20 10100 D 03 00011 M 12 01100 V 21 10101 E 04 00100 N 13 01101 W 22 10110 F 05 00101 O 14 01110 X 23 10111 G 06 00110 P 15 01111 Y 24 11000 H 07 00111 Q 16 10000 Z 25 11001 I 08 01000 R 17 10001
Zaszyfrujemy tekst LISTOPAD. LISTOPAD 01011 01000 10010 10011 01110 01111 00000 00011 8,stąd 01011010 00100101 00110111 00111100 00000011 Jeśli brakuje bitów, uzupełniamy blok do wielokrotności n dowolnymi bitami.
Klucz szyfrujący: B = (2002, 3337, 2503, 2170, 503, 172, 3347, 855) 2002 0 0 0 0 0 0 0 0 0 0 3337 1 3337 0 0 0 0 0 0 0 0 2503 0 0 1 2503 1 2503 1 2503 0 0 2170 1 2170 0 0 1 2170 1 2170 0 0 503 1 503 0 0 0 0 1 503 0 0 172 0 0 1 172 1 172 1 172 0 0 3347 1 3347 0 0 1 3347 0 0 1 3347 855 0 0 1 855 1 855 0 0 1 855 9357 3530 9047 5348 4202
Zapis dziesiętny liczb 9357, 3530, 9047, 5348 i 4202 zmieniamy na zapis przy podstawie 26, gdzie cyframi są litery. 935713 26 D21 26D23 NVX 3530 5 26 D 5 26D20 FFU 904713 26 D 9 26D25 NJZ 5348 7 26 D23 26D18 HXS 4202 6 26 D 5 26D16 GFQ Kryptogram: NVXFF UNJZH XSGFQ
Tekst jawny: LISTOPAD Klucz szyfrujący: B = (2002, 3337, 2503, 2170, 503, 172, 3347, 855) Kryptogram: NVXFF UNJZH XSGFQ
... czyli rozwiązywanie łatwego plecaka 1. k-literowe bloki tekstu zaszyfrowanego zamieniamy na liczby w systemie dziesiętnym 2. Każdą liczbę mnożymy przez 8 # i bierzemy resztę modulo m. 3. Rozwiązujemy problem łatwego plecaka otrzymując n-elementowe bloki bitów. 4. Zamieniamy 5-bitowe bloki na litery.
Kryptogram: EVGMG LJVDG QIJVD FIEGY P Każdy trzyliterowy blok liter zamieniamy na liczbę: EVG 4 26 D21 26D 63256 MGL 12 26 D 6 26D118279 JVD 9 26 D21 26D 36633 GQI 6 26 D16 26D 84480 JVD 9 26 D21 26D 36630 FIE 5 26 D 8 26D 43592 GYP 6 26 D24 26D154697
8 # 821, 6 4001. Mnożymy każdą z otrzymanych liczb przez 821 i bierzemy resztę z dzielenia przez 4001. 3256 821mod 4001 = 508 8279 821mod 4001 = 3361 6633 821mod 4001 = 332 4480 821mod 4001 = 1161 6633 821mod 4001 = 332 3592 821mod 4001 = 295 4695 821mod 4001 = 1635
>37,42,93,253,471,908,1945 1945 908 471 253 93 42 37 508 0 0 1 0 0 0 1 3361 1 1 1 0 0 0 1 332 0 0 0 1 0 1 1 1161 0 1 0 1 0 0 0 332 0 0 0 1 0 1 1 295 0 0 0 1 0 1 0 1632 0 1 1 1 0 0 0
Tworzymy 5-bitowe bloki i zamieniamy je na litery. 1 0 0 0 1 r 0 0 1 0 0 e 0 1 1 1 1 p 1 0 1 0 0 u 0 0 0 0 1 b 0 1 0 1 1 l 0 1 0 0 0 i 0 1 0 1 0 k 0 0 0 0 0 a 0 1 1 1 0 o
Kryptogram: EVGMG LJVDG QIJVD FIEGY P Klucz deszyfrujący: (37,42,93,253,471,908,1945, 4001, 821) Tekst jawny: REPUBLIKA.
Urodzony 6.VII.1952 licencjat z Tel Aviv University doktorat z Weizmann Institute W roku 1983 A. Shamir opublikował pracę, która zdyskwalikowała system kryptograczny oparty na problemie pakowania plecaka jako bezpieczny. Okazało się, że szyfr ten można złamaćw czasie wielomianowym. Po roku 1983 starano się utrudnić szyfr, ale ponieważ każdapróba kończyła się szybko podobną publikacją, szyfry oparte na problemie pakowania plecaka nie mają dziś dużego powodzenia, mimo że niektóre z nich w dalszym ciągu są nie złamane.