Efektywność Procedur
Obliczeniowych
wykład 3
Teoria złożoności obliczeniowej
Kodowanie danych
Alfabet, słowo, język
Reguła kodowania
Podział i rodzaje problemów
decyzyjne
optymalizacyjne
Deterministyczna Maszyna Turinga (?)
Kodowanie danych (1)
Definicja 1
Alfabetem nazywamy dowolny skończony zbiór symboli.
Alfabet oznaczamy symbolem ∑.
Kodowanie danych (2)
Przykłady:
∑ = {a, b, c, …, #}
, gdzie a, b, c, … są symbolami alfabetu, a # jest separatorem.Kodowanie danych (3)
Przykłady:
∑ = {a, b, c, …, #}, gdzie a, b, c, … są symbolami alfabetu, a # jest separatorem.
∑ = {0, 1, …, 9, #} – alfabet dziesiętny
Kodowanie danych (4)
Przykłady:
∑ = {a, b, c, …, #}, gdzie a, b, c, … są symbolami alfabetu, a # jest separatorem.
∑ = {0, 1, …, 9, #} – alfabet dziesiętny
∑ = {0, 1, #} – alfabet binarny
Kodowanie danych (5)
Przykłady:
∑ = {a, b, c, …, #}, gdzie a, b, c, … są symbolami alfabetu, a # jest separatorem.
∑ = {0, 1, …, 9, #} – alfabet dziesiętny
∑ = {0, 1, #} – alfabet binarny
∑ = {1, #} – alfabet jedynkowy
Kodowanie danych (6)
Definicja 2
Słowem alfabetu ∑ nazywamy
każdy skończony ciąg symboli
alfabetu ∑ \{#}.
Kodowanie danych (7)
Przykłady:
małpa, klowa, kora, uil, kjsdhjweoo
Kodowanie danych (8)
Przykłady:
małpa, klowa, kora, uil, kjsdhjwefncfoo
0, 123, 345, 8948756, 5745784570
słowa dziesiętne
Kodowanie danych (9)
Przykłady:
małpa, klowa, kora, uil, kjsdhjwefncfoo
0, 123, 345, 8948756, 5745784570
0, 1, 01, 11, 10, 1010, 001010010010
słowa binarne
Kodowanie danych (10)
Przykłady:
małpa, klowa, kora, uil, kjsdhjwefncfoo
0, 123, 345, 8948756, 5745784570
0, 1, 01, 11, 10, 1010, 001010010010
1, 11, 111, 1111, 11111111111
(słowa… ?)Kodowanie danych (11)
Definicja 3
Językiem L alfabetu ∑ nazywamy skończony ciąg słów danego
alfabetu oddzielonych
separatorami #.
Kodowanie danych (12)
Przykłady:
dom # klowy#pje#koroniggg#ew
język ?
Kodowanie danych (13)
Przykłady:
dom#klowy#pje#koroniggg#ew
4#54#456#467567567#54#98675
język dziesiętny
Kodowanie danych (14)
Przykłady:
dom#klowy#pje#koroniggg#ew
4#54#456#467567567#54#98675 1#01#110#10101110#0#1101#01
język binarny
Kodowanie danych (15)
Przykłady:
dom#klowy#pje#koroniggg#ew
4#54#456#467567567#54#98675
1#01#110#10101110#0#1101#01
1#11#111#1#111
język… (?)
Kodowanie danych (16)
Definicja 4
Słownikiem alfabetu ∑
nazywamy zbiór wszystkich słów
alfabetu ∑ \{#}.
Kodowanie danych (17)
Przykłady:
a, b, c,…, aa, ab, …, zzzzzzzzz
słownik (?)
Kodowanie danych (18)
Przykłady:
a, b, c,…, aa, ab, …, zzzzzzzzz
0, 1, 2,…, 11, 12, …, 9999999
słownik dziesiętny
Kodowanie danych (19)
Przykłady:
a, b, c,…, aa, ab, …, zzzzzzzzz
0, 1, 2,…, 11, 12, …, 9999999
0, 1, 01,…, 1000, 1001, …, 1111111111
słownik dwójkowy
Kodowanie danych (20)
Przykłady:
a, b, c,…, aa, ab, …, zzzzzzzzz
0, 1, 2,…, 11, 12, …, 9999999
0, 1, 01,…, 1000, 1001, …, 1111111111
1, 11, 111,…, 1111111, …, 11111111111
słownik jedynkowy
Reguła kodowania danych (1)
1. Każdą daną problemu reprezentujemy jednym słowem języka L alfabetu ∑
2. Kolejność danych musi być określona 3. Kolejne dane oddzielone są
separatorami #
4. Dane o równych wartościach
kodowane są tym samym słowem
Reguła kodowania danych (2)
Twierdzenie 1
Dane każdej instancji I problemu Π można przedstawić za pomocą pewnego języka L danego
alfabetu ∑ korzystając z reguły
kodowania.
Reguła kodowania danych (3)
Przykłady:
3#7#2 – kodowanie dziesiętne
11#111#01
–
kodowanie binarne 111#1111111#11
–
kodowanie jedynkoweJakiego problemu dotyczą? Jak może wyglądać instancja tego problemu?
Reguła kodowania danych (4)
Przykład – problem podziału
X = {x1, …, xi, …, xn} = {5, 12, 14, 23, 9}
B = 63, 5𝑖=1 𝑥𝑖 = 2B Pytanie:
Czy istnieje podzbiór X1 X takie, że 𝑥 𝑥𝑖
𝑖∈𝑋1 = B
Reguła kodowania danych (5)
Kodowanie instancji I x1#x2#x3#x4#x5#B
Kodowanie dziesiętne
………
Długość łańcucha kodującego wynosi N10(I) = ………
Reguła kodowania danych (6)
Kodowanie instancji I x1#x2#x3#x4#x5#B
Kodowanie dziesiętne 5#12#14#23#9#64
Długość łańcucha kodującego wynosi N10(I) = ………
Reguła kodowania danych (7)
Kodowanie instancji I x1#x2#x3#x4#x5#B
Kodowanie dziesiętne 5#12#14#23#9#64
Długość łańcucha kodującego wynosi N10(I) = 15
Reguła kodowania danych (5)
Kodowanie instancji I x1#x2#x3#x4#x5#B
Kodowanie binarne
………
Długość łańcucha kodującego wynosi N2(I) = ………
Reguła kodowania danych (6)
Kodowanie instancji I x1#x2#x3#x4#x5#B
Kodowanie binarne
101#1100#1110#10111#1001#100000
Długość łańcucha kodującego wynosi N2(I) = ………
Reguła kodowania danych (7)
Kodowanie instancji I x1#x2#x3#x4#x5#B
Kodowanie binarne
101#1100#1110#10111#1001#100000
Długość łańcucha kodującego wynosi N2(I) = 31
Reguła kodowania danych (5)
Kodowanie instancji I x1#x2#x3#x4#x5#B
Kodowanie jedynkowe
………
Długość łańcucha kodującego wynosi N1(I) = ………
Reguła kodowania danych (6)
Kodowanie instancji I x1#x2#x3#x4#x5#B
Kodowanie jedynkowe
11111#111111111111#...#1111111111111…111111 Długość łańcucha kodującego wynosi N1(I) = ………
Reguła kodowania danych (7)
Kodowanie instancji I x1#x2#x3#x4#x5#B
Kodowanie jedynkowe
11111#111111111111#...#1111111111111…111111 Długość łańcucha kodującego wynosi N2(I) = 132
Kodowanie danych – przykład (1)
Przykład – problem podziału (raz jeszcze)
X = {x1, …, xi, …, xn} – zbiór n elementów xi N+,
gdzie N+ = {1, 2, …}
𝑥𝑖
5𝑖=1 = 2B
Pytanie:
Czy istnieje podzbiór X1 X takie, że 𝑥 𝑥𝑖
𝑖∈𝑋1 = B
Kodowanie danych – przykład (2)
Kodowanie instancji I x1#x2#...xn#B
N10(I)=logx1+1+logx2+1+…+logxn+1+logB =
logxi+n+logB
𝑛𝑖=1 (n+1)∙ 𝑚𝑎𝑥𝑗𝜖 1,𝑛 {logxi+1,
logB}
= O(𝑛 ∙ 𝑚𝑎𝑥𝑗𝜖 1,𝑛 {logxi+1, logB})
x - najmniejsza liczba całkowita nie mniejsza niż x
Kodowanie danych – przykład (3)
Kodowanie instancji I x1#x2#...xn#B
N2(I)= log2x1+1+log2x2+1+…+log2xn+1+log2B =
log2xi+n+log2B
𝑛𝑖=1 (n +1)∙ 𝑚𝑎𝑥𝑗𝜖 1,𝑛 {log2xi+1,
log2B}
= O(𝑛 ∙ 𝑚𝑎𝑥𝑗𝜖 1,𝑛 {log2xi+1, log2B})
Kodowanie danych – przykład (4)
Kodowanie instancji I x1#x2#...xn#B
N1(I)=x1+1+x2+1+…+xn+1+B = xi+n+B
𝑛𝑖=1 (n+1)∙ 𝑚𝑎𝑥𝑗𝜖 1,𝑛 {xi+1, B}
= O(𝑛 ∙ 𝑚𝑎𝑥𝑗𝜖 1,𝑛 {xi, B})
„Rozsądna” reguła kodowania (1)
„Rozsądna” reguła kodowania nie powoduje wykładniczego wzrostu rozmiaru danych
wejściowych kodowanej instancji w stosunku do innych reguł kodowania.
Czyli…
„Rozsądna” reguła kodowania (2)
Niech dwie reguły kodowania instancji I dające łańcuchy kodowania o długościach Nn(I) oraz Nm(I) spełniają relację:
Nn(I)≥ 𝑘𝑁𝑚(𝐼) dla pewnej stałej k>1.
Wtedy (pierwsza) Nn(I) jest „nierozsądna”, ponieważ powoduje wykładniczy wzrost
rozmiaru danych wejściowych.
„Rozsądna” reguła kodowania (3)
Jeżeli oznaczymy przez MAX(I)największą wartość w danej instancji, to dla systemu o podstawie b otrzymamy:
Nb(I)=O(nlogb(MAX(I)))
…
„Rozsądna” reguła kodowania (4)
Oznaczmy przez N1(I) długość łańcucha
kodowania jedynkowego oraz Nb(I) długość
łańcucha kodowania w systemie o podstawie b≥2 N1(I)=O(nMAX(I))=O(n𝑏𝑙𝑜𝑔𝑏𝑀𝐴𝑋(𝐼))
Nb(I)=O(nlogb(MAX(I))) Z powyższego wynika, że…
„Rozsądna” reguła kodowania (5)
… kodowanie jedynkowe daje wykładniczy wzrost rozmiaru problemu w stosunku do kodowania w systemie o podstawie b≥2.
Zatem, odrzucamy kodowanie jedynkowe danych wejściowych ze względu na jego nieefektywność – zgodnie z „rozsądną” regułą kodowania.
Reguła kodowania danych (pwt)
1. Każdą daną problemu reprezentujemy jednym słowem języka L alfabetu ∑
2. Kolejność danych musi być określona 3. Kolejne dane oddzielone są
separatorami #
4. Dane o równych wartościach
kodowane są tym samym słowem
„Rozsądna” reguła kodowania (pwt)
Niech dwie reguły kodowania instancji I dające łańcuchy kodowania o długościach Nn(I) oraz Nm(I) spełniają relację:
Nn(I)≥ 𝑘𝑁𝑚(𝐼) dla pewnej stałej k>1.
Wtedy (pierwsza) Nn(I) jest „nierozsądna”, ponieważ powoduje wykładniczy wzrost
rozmiaru danych wejściowych.
Rodzaje i podział problemów (1)
Czy dana liczba naturalna n jest liczbą pierwszą ? Czy istnieje podzbiór X1 X takie, że 𝑥 𝑥𝑖
𝑖∈𝑋1 = B ? Jaka jest najkrótsza droga w TSP ?
Jakich odpowiedzi można udzielić na ww. postawione pytania?
Co należy zrobić, aby odpowiedzieć na ww. pytania?
Rodzaje i podział problemów (2)
Problem, w którym mamy za zadanie znaleźć ekstremum funkcji nazywamy problemem
optymalizacyjnym.
Problem, w którym mamy za zadanie udzielić odpowiedzi „tak” lub „nie”, nazywamy
problemem decyzyjnym.
Rodzaje i podział problemów (3)
Teoria złożoności obliczeniowej odnosi się bezpośrednio do problemów decyzyjnych, a pośrednio do problemów optymalizacyjnych.
jak?
Rodzaje i podział problemów (4)
Twierdzenie 2
Z każdym problemem
optymalizacyjnym można
związać odpowiadający mu
problem decyzyjny.
Rodzaje i podział problemów (5)
Uwaga do Twierdzenia 2
Twierdzenie odwrotne nie jest
prawdziwe !!!
Rodzaje i podział problemów (6)
Przykłady problemów decyzyjnych:
Problem podziału
Problem spełnialności formuł logicznych (SAT) Przykłady problemów optymalizacyjnych:
Problem plecakowy
Problem komiwojażera (TSP)
Problemy „łatwe” i „trudne” (1)
Problemy „łatwe” to problemy rozwiązywalne w czasie wielomianowym.
Problemy „trudne” to problemy, których prawie na pewno nie można tak rozwiązać.
a wracając do Twierdzenia 2…
Problemy „łatwe” i „trudne” (2)
Twierdzenie 2
Z każdym problemem optymalizacyjnym można związać odpowiadający mu problem decyzyjny.
Jeżeli mamy parę problemów Po i Pd, to
jeżeli Pd jest „łatwy”, to Po również jest „łatwy”
Jeżeli Pd jest „trudny”, to Po również jest „trudny”
Problemy „łatwe” i „trudne” (3)
Dany jest zbiór n elementów N={1,…,n}. Dla każdego elementu jJ określony jest jego
rozmiar aj>0 oraz wartość wj>0. Dodatkowo dana jest pojemność plecaka B>0.
Znaleźć podzbiór X ⊆ N taki, że 𝑎𝑗 ≤ 𝐵
𝑗∈𝑋 oraz 𝑗∈𝑋 𝑤𝑗 → 𝑚𝑎𝑥
Problem plecakowy – wersja… (?)
Problemy „łatwe” i „trudne” (4)
Dany jest zbiór n elementów N={1,…,n}. Dla każdego elementu jJ określony jest jego
rozmiar aj>0 oraz wartość wj>0. Dodatkowo
dana jest pojemność plecaka B>0 oraz stałą y≥0.
Czy istnieje podzbiór X ⊆ N taki, że 𝑎𝑗 ≤ 𝐵
𝑗∈𝑋 oraz 𝑗∈𝑋 𝑤𝑗 ≤ 𝑦?
Problem plecakowy – wersja… (?)
Problemy „łatwe” i „trudne” (5)
Jeżeli mamy problem maksymalizacji maxxXf(x), to odpowiadająca mu wersja decyzyjna wygląda następująco:
Czy istnieje x*X takie, że f(x*)y ?
Jeżeli mamy problem minimalizacji minxXf(x), to odpowiadająca mu wersja decyzyjna wygląda następująco:
Czy istnieje x*X takie, że f(x*)≤y ?
Złożoność obliczeniowa (1)
Funkcją czasowej złożoności obliczeniowej algorytmu A rozwiązującego problem jest funkcja przyporządkowująca każdej wartości
rozmiaru N(I) instancji ID maksymalną liczbą elementarnych operacji komputera potrzebną do rozwiązania instancji o tym samym rozmiarze za pomocą algorytmu A.
Złożoność obliczeniowa (2)
Algorytmem wielomianowym nazywamy algorytm, którego złożoność obliczeniowa jest O(p(k)),
gdzie p jest pewnym wielomianem, a k rozmiarem rozwiązywanej instancji.
Każdy algorytm, którego złożoność nie może być tak ograniczona nazywamy algorytmem
wykładniczym.
Złożoność obliczeniowa (3)
W praktyce korzystnie jest wyznaczyć rozmiar problemu za pomocą jednego lub dwu
parametrów określających liczbę elementów zbioru istotnego dla danego problemu.
Złożoność obliczeniowa (4)
Pojęcia teorii złożoności obliczeniowej
formułowane są za pomocą maszyn Turinga, deterministycznej i niedeterministycznej,
które są modelami formalnymi obliczeń.
Złożoność obliczeniowa (5)
Ale to już opowieść na kolejne spotkanie…