[Algorytmy] Operacje na listach

errryk
Użytkownik
Użytkownik
Posty: 4
Rejestracja: 22 lip 2010, o 03:09
Płeć: Mężczyzna
Lokalizacja: Polska
Podziękował: 3 razy

[Algorytmy] Operacje na listach

Post autor: errryk »

Mam takie zadanie:

Z listy liczb naturalnych usuń te, które nie są sumą kilku bezpośrednich swoich poprzedników.
Generalnie rozwiązanie kwadratowe jest robialne: wystarczy odwrócić listę (co robi się w czasie liniowym) i sprawdzać dla każdego elementu, czy jest sumą swoich poprzedników (tzn po odwróceniu już następników).

Chciałbym jednak Was zapytać, czy widzicie jakieś lepsze rozwiązanie tego problemu
norwimaj
Użytkownik
Użytkownik
Posty: 5101
Rejestracja: 11 mar 2011, o 16:31
Płeć: Mężczyzna
Lokalizacja: 52°16'37''N 20°52'45''E
Podziękował: 4 razy
Pomógł: 1001 razy

[Algorytmy] Operacje na listach

Post autor: norwimaj »

Wskazówka:
Jeśli na liście \(\displaystyle{ [x_1,x_2,\ldots,x_n]}\) liczba \(\displaystyle{ k}\)-ta w kolejności jest sumą kilku poprzednich, to \(\displaystyle{ x_k=s_{k-1}-s_{l-1}}\) dla pewnego \(\displaystyle{ l\in\{1,2,\ldots,k\}}\), gdzie \(\displaystyle{ s_i=x_1+x_2+\ldots+x_i}\).
Ponieważ liczby \(\displaystyle{ x}\) są naturalne, to lista \(\displaystyle{ [s_0,s_1,\ldots,s_n]}\) jest niemalejąca.
ODPOWIEDZ