Jeśli dobrze to rozumiem, algorytm, który oblicza wartość rzeczywistej funkcji ma złożoność obliczeniową O ( g ( n ) ), jeśli zachowuje następujące warunki: Gdy obliczamy f z dokładnością δ, wymaga to rzędu g ( n ) kroków.
Co jednak jeśli mamy algorytm, który najpierw „znajdzie bardziej wydajny algorytm do obliczenia ”, a następnie oblicza f ?
Innymi słowy, co jeśli mamy algorytm który wykonuje następujące czynności:
Znajdź wydajny algorytm do obliczeń f .
użyj do obliczenia f .
W takim przypadku nie możemy już mówić o czasie obliczeniowej zajęłoby aby obliczyć na przykład dlatego, że całkowicie zależy od tego, czy algorytm już znalazł algorytm B . Innymi słowy, czas obliczeniowy wymagany do obliczenia f ( 5 ), jeśli 5 jest pierwszą liczbą obliczoną, jest znacznie większy niż czas obliczeniowy wymagany do obliczenia f ( 5 ) po obliczeniu już f ( 3 ) .
Moje pytanie brzmi: czy istnieje koncepcja / teoria dotycząca tego rodzaju algorytmu, który najpierw szuka innego algorytmu przed obliczeniem funkcji? W szczególności zastanawiam się nad analizą złożoności obliczeniowej takich algorytmów.
źródło
Odpowiedzi:
Podczas gdy algorytm Levina jest niepraktyczny (ze względu na ogromne stałe), jest bardzo interesujący teoretycznie. Zobacz artykuł Scholarpedia, aby uzyskać więcej informacji na temat wyszukiwania uniwersalnego.
źródło
Załóżmy, że mamy funkcję,
f
która pobiera argumentx
typuA
i generuje inną funkcję, która pobiera argumenty
typuB
i zwraca wynik typuC
. W twoich słowachf
bierze argumentx
i zwraca „algorytm”, który przyjmuje dane wejściowe typuB
i generuje wyniki typuC
.Funkcja
f
ma typRzeczywiście, przyjmuje
x : A
i zwraca funkcję typuB → C
. Ale takaf
jest równoważna funkcjig : A × B → C
, które bierze zarównox
iy
od razu i daje wynik końcowy. Rzeczywiście między typami występuje izomorfizmi
ponieważ możemy zdefiniować
g
w kategoriachf
jakoi możemy zdefiniować
f
w kategoriachg
jakoOperacja przejścia od
g
dof
nazywa się curry, a programiści funkcjonalni używają jej przez cały czas. W teorii obliczalności idea wzięcia jednego wejścia i wyjścia funkcji (algorytmu) jest zawarta w twierdzeniu smn .Odpowiedź na twoje pytanie brzmi: „tak, ludzie robią to cały czas”. Ale jest też morał: algorytm, który znajduje algorytm, wciąż jest tylko algorytmem.
źródło