Czy w przypadku pomiaru złożoności algorytmu jest to złożoność czasowa czy złożoność obliczeniowa? Jaka jest różnica między nimi?
Kiedyś obliczałem maksymalną (najgorszą) liczbę podstawowych (najbardziej kosztownych) operacji w algorytmie.
Czy w przypadku pomiaru złożoności algorytmu jest to złożoność czasowa czy złożoność obliczeniowa? Jaka jest różnica między nimi?
Kiedyś obliczałem maksymalną (najgorszą) liczbę podstawowych (najbardziej kosztownych) operacji w algorytmie.
Odpowiedzi:
Złożoność obliczeniowa jest po prostu bardziej ogólnym terminem, ponieważ czas nie jest jedynym zasobem, jaki chcielibyśmy rozważyć. Następną najbardziej oczywistą jest przestrzeń, z której korzysta algorytm, a zatem możemy mówić o złożoności przestrzeni , również jako części złożoności obliczeniowej. Rzeczywiście, możemy to zrobić w przypadku każdego stosowanego przez Ciebie środka, oczywiście niektóre środki są bardziej przydatne niż inne.
Tak więc zliczenie liczby kroków, które algorytm wykonuje w najgorszym przypadku, określa złożoność czasową związaną z rozwiązywanym przez niego problemem, zliczanie ilości pamięci / liczby wykorzystywanych komórek, co wiąże się ze złożonością przestrzeni itp.
Pamiętaj także, że jeśli chcesz być ścisły, złożoność odnosi się do problemu, a nie algorytmu, więc problem ma ograniczenia złożoności, algorytm ma ograniczenia zasobów (czas działania, wykorzystanie miejsca ...). To tylko kwestia formalnej definicji, teoria złożoności dotyczy problemów. Tak, algorytmy są kluczowym narzędziem dla problemów analizy i złożoności i algorytmika są ściśle ze sobą powiązane, ale formalnie nie powiedziałbym Merge-Sort (algorytm) jest , to problem S o r t i n g , który jest w P . Scalanie-sortowanie wykorzystuje określone zasoby ( O ( n log n )kroki na przykład). Ograniczenie zasobów i poprawność algorytmu implikują złożoność (górną granicę) problemu, ale są to różne rzeczy. także T C 0 -Complete pod C 0 -reductions, złożoność związaną może być tylko bardzo podane dla problem (ale ma wpływ algorytmiczne).
Cyklomatyczną złożoność często stosuje się jako miarę złożoności obliczeniowej, przydatny przykład podano w /programming/9097987/calculation-of-cyclomatic-complexity
Może istnieć wiele różnych (prawdopodobnie zagnieżdżonych) ścieżek w algorytmie, co daje mu wysoką złożoność cykliczną, ale nie ma pętli, które zapewniają złożoność w niskim czasie. Program z pojedynczą pętlą miałby niską złożoność cykliczną, ale być może wysoką złożoność czasową.
Cyklomatyczna złożoność jest często używana jako miara konserwacji wymaganej dla kodu. Bardziej szczegółową dyskusję można znaleźć w http://docs.sonarqube.org/display/SONAR/Bad+Distribution+of+Complexity . Różni się to od złożoności czasowej, którą jest pomiar czasu wykonywania kodu i może być wykorzystywany do oceny postrzegania przez użytkowników skuteczności systemu.