W najbardziej formalnym sensie wielkość danych wejściowych mierzona jest w odniesieniu do implementacji algorytmu maszyny Turinga i jest to liczba symboli alfabetu potrzebnych do zakodowania danych wejściowych.
Jest to oczywiście raczej abstrakcyjne i bardzo trudne do pracy w praktyce, a przynajmniej bardzo denerwujące - musielibyśmy zastanowić się, w jaki sposób określamy ograniczniki itp. Itd. To, co zwykle dzieje się w praktyce, to szukanie proxy pomiar wielkości wejściowych - coś bardziej wygodne i dostępne, ale to nie powoduje żadnych problemów matematycznych w naszej analizie.
Korzystając z przykładu „abcde”, zwykle jest tak, że alfabet, którego używamy do wprowadzania danych, jest niewielki, więc nawet używając pomiaru proxy znaków, wiemy, że nawet na maszynie Turinga możemy, jeśli będziemy się tym przejmować, podaj kodowanie wejściowe, które przekształciłoby „abcde” w jakąś zakodowaną formę, która miała długość co najwyżej dla niektórych stałych . To rozszerzenie o stałą zwykle nie robi różnicy w naszej analizie asymptotycznej, ponieważ rutynowo odrzucamy czynniki stałe.5 × c c55×c c
W innym przypadku często mierzymy rozmiar wykresu wejściowego na podstawie liczby wierzchołków . Oczywiście, jeśli chcemy określić dowolnie duże wykresy, rozmiar zakodowanego wejścia nie jest po prostu - co się stało na przykład z krawędziami? Wiemy, że możemy zastosować rozsądny schemat kodowania, który reprezentuje wykres w bitach. Jest to trochę bardziej rozwinięcie niż stałe, ale w wielu interesujących przypadkach mamy do czynienia tylko z ziarnistością wielomianów, a wielomiani ładnie komponują się na wiele sposobów - w szczególności na przykład, jeśli ustalamy, że naszym czasem działania jest gdzie jest wielomianem, to wiemy, że jest jakiś wielomiann N = c ⋅ n 2 log n O ( p ( n ) ) p p ′ O ( p ( n ) ) = O ( p ′ ( N ) )nnN=c⋅n2lognO(p(n))pp′ takie, że , więc kiedy wrócimy do formalnej miary danych wejściowych, nadal znajdujemy się w czasie wielomianowym.O(p(n))=O(p′(N))
Miejsce, w którym może to spaść, dotyczy pracy z liczbami. Ponieważ liczba o wielkości może być zakodowana w bitach , gdyby nasz czas działania wynosił , byłby to - wykładniczy w rzeczywistym rozmiarze wejściowym - który sprawiłoby, że wielkość byłaby złym wyborem dla proxy dla wielkości wejściowej, gdybyśmy chcieli na przykład porozmawiać o członkostwie w na przykład w przypadku Strong- -complete i Weakly- -kompletne, pamiętaj o tym). Z drugiej strony, gdyby wszystkim, co nas interesowało, była rozstrzygalność, byłby to wystarczająco dobry miernik zastępczy.n = O ( log m ) O ( m ) O ( 2 n ) m P N P N Pmn=O(logm)O(m)O(2n)mPNPNP
Tak więc, chociaż nie ma określonej reguły wybierania miary proxy dla rozmiaru wejściowego, wymaganie jest takie, aby rozszerzenie lub zmniejszenie rozmiaru proxy w porównaniu z wielkością wejściową były zgodne z tym, co próbujesz udowodnić. Zasadniczo stałe zmiany czynników prawie nigdy nie mają znaczenia, małe czynniki wielomianowe są zwykle w porządku i działają w przypadku większości podstawowej teorii, którą widzisz, duże czynniki wielomianowe mogą nadal działać w teorii, ale mogą być przykrą niespodzianką w praktyce, a wykładnicze wielkości zmian są zwykle zbyt ekstremalne.
Zależy to od twojego modelu obliczeniowego, a także niestety czasami od samego algorytmu.
Jednak wiele algorytmów nie jest mierzonych w odniesieniu do „rzeczywistego” rozmiaru wejściowego. Następnie musisz dokładnie sprawdzić, do czego odnosi się stwierdzenie analizy.
Pewna zasada: używaj, co chcesz, ale wyraź to jasno w zestawieniu wyniku. Więc po prostu powiedzieć co dokładnie to, czy istnieje szansa na nieporozumieniu.n
źródło