|
Programiranje Programski jezici, tehnike, alatke... |
|
Alatke vezane za temu | Vrste prikaza |
29.6.2011, 17:02 | #1 |
Član
Član od: 14.4.2010.
Lokacija: Podgorica
Poruke: 332
Zahvalnice: 61
Zahvaljeno 11 puta na 11 poruka
|
Maximalni zbir N elemenata u nizu
C++
Dat je niz T od N elemenata. Naci maximalan zbir uzastopnih K elemenata. Input: U prvom redu se nalaze 2 cijela broja N i K. U drugom redu se nalazi N cijelih brojeva koje treba ucitati u niz T Output U jednom i jedinom redu ispisati maximalan zbir uzastopnih K elemenata. Ogranicenja: 1 <= N <= 1 000 000, 0 < T[i] <= 1 000 vrijeme: 2 sekunde memorija: 256MB Primer: 6 3 10 50 30 20 5 1 ----------------- 100 50 + 30 + 20 = 100. Spoiler za Kod:
Moj algoritam je slozenosti O(N). Prvo sabere prvih K-1 element i zapamti poziciju prvog elementa. Zatim doda sledeci element, uporedi sa trenutnom max vrijednoscu, a onda od zbira oduzme prvi element, i opet dodaje sledeci element, uporedjuje sa max i sve tako u krug dok ne stigne do kraja... Postoji li neki algoritam koji radi mnogo brze ... na primer za O(log n); |
29.6.2011, 17:20 | #2 |
V.I.P. Programiranje
|
Re: Maximalni zbir N elemenata u nizu
Jok. Logaritamsko vreme može da ti se pojavi u problemima u kojima se veličina problema geometrijski smanjuje (recimo, binary search, gde se veličina problema smanjuje dva puta sa svakim upoređivanjem). U ovom slučaju cenim da ne bi postojao efikasniji algoritam, mada možda može nešto dinamičkim programiranjem da se izvuče. Sad žurim, probaću kad se vratim.
EDIT: Mjok, ne uspevam da dobijem manje od O(n). Kod:
#include <cstdio> typedef unsigned int uint32; int main(void) { uint32 sum = 0, n = 0, k = 0, maxSum = 0; scanf("%u %u", &n, &k); uint32 *nums = new uint32[n]; for (uint32 i = 0; i < n; ++i) { scanf("%u", nums + i); if (i > k-1) { sum += nums[i]; sum -= nums[i-k]; } else sum += nums[i]; if (sum > maxSum) maxSum = sum; } printf("%u", maxSum); return 0; } EDIT 2: U je, nisam video da si ti već dao svoj kôd. Poslednja ispravka: Geomaster (29.6.2011 u 17:35) |
Sledeći korisnik se zahvaljuje korisniku Geomaster na korisnoj poruci: | ||
clzola (29.6.2011) |
30.6.2011, 0:16 | #3 |
Član
Član od: 30.10.2005.
Lokacija: Vancouver, BC
Poruke: 475
Zahvalnice: 48
Zahvaljeno 95 puta na 75 poruka
|
Re: Maximalni zbir N elemenata u nizu
Može se jednostavno videti da efikasnije nikako ne može od O(n), jer u svakom slučaju moraš proći barem jednom kroz svaki element niza, a to je onda već O(n).
|
Bookmarks sajtovi |
|
|