Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]złożoność algorytmu. time complexity O(N) vs O(N * N)
Forum PHP.pl > Forum > Przedszkole
porzeczki
pomijając jakość poniższego algorytmu, co sprawia że ma time complexity O(N * N) a nie O(N)? if w pętli for czy foreach obok for?



  1. private function solution(array $A)
  2. {
  3.  
  4. $najniższaWB=0;
  5. foreach($A as $value){
  6. $najniższaWB += abs($value);
  7. }
  8.  
  9. $r=abs($A);
  10.  
  11. $wartoscBezwzgl=[];
  12.  
  13. for($i=1;$i<count($A)+1;$i++)
  14. {
  15. $right = array_sum(array_slice($A,$i));
  16. $left = array_sum(array_slice($A,0,$i));
  17.  
  18. $wartoscBezwzgl = abs($left-$right);
  19.  
  20. if ($wartoscBezwzgl < $najniższaWB){
  21. $najniższaWB=$wartoscBezwzgl;
  22. }
  23.  
  24. }
  25.  
  26. return $najniższaWB;
  27. }
SmokAnalog
Moim zdaniem na taką złożoność składa się tu array_sum w for, a count w warunku for też nie pomaga. Zoptymalizuj to, nie musisz przecież liczyć całej sumy za każdym razem od nowa, skoro odejmujesz tylko jeden element. A count trzymaj w zmiennej.
porzeczki
przeniosłem count i dalej jest O(N*N). Też mi się wydaje, że array_sum albo array_slice.
SmokAnalog
No tak, dalej tak będzie. Zlicz sumę i po kolei odejmuj od niej określone elementy zanim obliczać sumę z wycinka tablicy. Wtedy będzie O(n).
porzeczki
ok, dzięki
Pyton_000
http://stackoverflow.com/a/33474486/3732803
SmokAnalog
Są jakieś narzędzia online, które mierzą złożoność funkcji napisanych w PHP?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.