Mam algorytm liczenia, dla którego próbuję uzyskać ogólny opis big-o. Jest straszliwie zagnieżdżony i strasznie wykładniczy. Oto ona:Uproszczenie złożoności Big-O tego wykładniczego algorytmu
1. For each T_i in T
2. For k = 1 to max_k
3. For each of 2^k*(n choose k) items
4. For each t in T_i
5. check if the item is in t...etc.
Oto pomysł linia po linii z każdym systemem
- Jest to prosty podział i mam zamiar po prostu dać mu stałą c1.
- max_k to mała liczba, zawsze mniejsza niż n, może około 4 lub 5. Będę używał k poniżej.
- Pętla ta zawsze prowadzi 2^k * (n wybrać k) razy
- Rozważając linia 1 Stałe możemy uogólnić tę linię i wiem, że nigdy nie będzie strzelać więcej niż 2^n razy w sumie w najgorszym przypadku, ale generalnie będzie działał ułamek 2^n razy, więc nazwiemy to (2^n)/c2
- Jest to prosta operacja if-instrukcja wewnątrz wszystkich tych pętli, więc c3.
Mnożąc to wszystko razem daje:
c1 * k * 2^k * (n choose k) * (2^n)/c2 * c3
Ponieważ chcę reprezentację big-O, ignorując stałe daje:
k * 2^k * (n choose k) * (2^n)
Wiadomo, że (n wybrać k) jest ograniczona powyżej (n * e/K)^k, tak:
O(k * 2^k * (n * e/k)^k * (2^n))
My questi on jest, co mogę tu zignorować ... 2^n jest z pewnością dominującym terminem, ponieważ n jest zawsze większe niż k, a zazwyczaj o wiele bardziej. Czy można to uprościć do O (2^n)? Lub O (2^straszne)? Czy powinienem zostawić w 2^k, jak w O (2^k * 2^n)? (lub pozostawić wszystkie warunki?)
Rozumiem, że jeśli k lub max_k może konkurować lub przewyższać n, to są one niezbędne. Ale skoro są one zawsze zdominowane, czy można je odrzucić, podobnie jak terminy wielomianowe rzędu niższego rzędu? Przypuszczam, że cały bałagan czasu wykładniczego mnie myli. Wszelkie porady są mile widziane.
+1 Silna odpowiedź ... – MoonKnight
Jeśli prawdą jest, że n jest zawsze większe niż k, czy to wystarcza do skreślenia k, a tym samym do usunięcia? Myślę, że to właśnie mówisz, ale chcę być pewna. Twój przykład n * lg (k) jest całkiem jasny - dziękuję za to. –
@Chucktown: 'Jeśli prawdą jest, że n jest zawsze większe niż k, czy to wystarcza do skreślenia k, a więc usunięcia?' Nie. Kiedy mówimy, że 'k jest ograniczone' mamy na myśli, że jest * STAŁA *' c' takie, że 'k
amit