Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]złożoność algorytmu. time complexity O(N) vs O(N * N)
porzeczki
post 12.11.2016, 22:41:38
Post #1





Grupa: Zarejestrowani
Postów: 144
Pomógł: 0
Dołączył: 15.09.2016
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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. }
Go to the top of the page
+Quote Post
SmokAnalog
post 12.11.2016, 22:50:47
Post #2





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
porzeczki
post 12.11.2016, 22:59:41
Post #3





Grupa: Zarejestrowani
Postów: 144
Pomógł: 0
Dołączył: 15.09.2016
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


przeniosłem count i dalej jest O(N*N). Też mi się wydaje, że array_sum albo array_slice.
Go to the top of the page
+Quote Post
SmokAnalog
post 12.11.2016, 23:01:07
Post #4





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

Ostrzeżenie: (0%)
-----


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).
Go to the top of the page
+Quote Post
porzeczki
post 12.11.2016, 23:02:37
Post #5





Grupa: Zarejestrowani
Postów: 144
Pomógł: 0
Dołączył: 15.09.2016
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


ok, dzięki
Go to the top of the page
+Quote Post
Pyton_000
post 12.11.2016, 23:10:19
Post #6





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


http://stackoverflow.com/a/33474486/3732803
Go to the top of the page
+Quote Post
SmokAnalog
post 12.11.2016, 23:12:18
Post #7





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

Ostrzeżenie: (0%)
-----


Są jakieś narzędzia online, które mierzą złożoność funkcji napisanych w PHP?
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 18.07.2025 - 03:00