Strona 1 z 1
Dwa algorytmy, który lepszy.
: 30 maja 2011, o 17:13
autor: Kanodelo
Dane są algorytmy które mogą policzyć sume
\(\displaystyle{ 2+4+...+2N}\).
Algorytm jeden
Kod: Zaznacz cały
(1) Niech S<-0
(2) Dla I od 1 do N wykonaj
(2.1) I<-2&I
(2.2) S<-S+I
(3) Wypisz S
Algorytm dwa
Kod: Zaznacz cały
(1) Niech S<-0
(2) Dla I od 1 do N wykonaj
(2.1) S<-S+I
(3) Niech S<-S*2
(4) Wypisz S
Który z nich jest sprawniejszy i dlaczego?
Dwa algorytmy, który lepszy.
: 30 maja 2011, o 19:25
autor: PMichalak
Pierwszy wykonuje n mnożeń i n dodawań (nie licząc inkrementacji w pętli).
Drugi wykonuje 1 mnożenie i n dodawań, więc drugi będzie szybszy, jednak oba są nieoptymalne.
Dwa algorytmy, który lepszy.
: 30 maja 2011, o 20:14
autor: Errichto
Oba są tak samo złe, mają tę samą złożoność.
Lepsze byłoby wyliczenie wyniku ze wzoru na sumę ciągu arytm.
Dwa algorytmy, który lepszy.
: 30 maja 2011, o 21:58
autor: PMichalak
Mierzone operacjami bitowymi mnożenie ma większą złożoność niż dodawanie.
Dwa algorytmy, który lepszy.
: 31 maja 2011, o 00:37
autor: Errichto
Bezsensowne by było ocenianie programów z takimi szczegółami. Dla większych programów byłoby to niewykonalne.
W obu przypadkach złożoność liniowa, z bardzo małą stałą - i tyle.
Dwa algorytmy, który lepszy.
: 31 maja 2011, o 19:33
autor: PMichalak
Jak już mówiłem to zależy od przyjętego kryterium zlożoności, jeśli przyjmiemy, że dodawanie i mnożenie zajmuje stały czas to masz racje, jednak jeśli mierzysz operacje na bitach to dodawanie ma złożoność \(\displaystyle{ \Theta (log n)}\) natomiast najszybsze mnożenie teoretycznie \(\displaystyle{ \Theta (log n \cdot log log n \cdot \log log log n)}\), więc nie są asymptotycznie równoważne.
Dwa algorytmy, który lepszy.
: 31 maja 2011, o 19:41
autor: Errichto
Dla prostych algorytmów takie szczegóły są bez znaczenia.
Dla trudniejszych takie wyliczenie jest awykonalne.
Zawsze uczyłem się, że operacjami podstawowymi są np. dodawanie i mnożenie, a np. pierwiastkowanie daje po prostu większą stałą.
Tak też jest w szkolnych podręcznikach i na omówieniach zadań typu OI. Wiki też proponuje taki system.
Nie wiem jak jest na studiach i dalej - może czasem się uznaje operacje bitowe za podstawowe i na ich podstawie określa złożoność. No ale ja się z tym nie spotkałem.
Dwa algorytmy, który lepszy.
: 31 maja 2011, o 19:53
autor: PMichalak
Operacjami bitowymi mierzy się zazwyczaj złożoność algorytmów teorioliczbowych.