GeezerVisonThe World Wide Web, restored to 800 pixels of glory. |
| Home|About|Gaming cabinet|Archives|How it works|Starter sites |
GeezerVison is showing uk.javascript.info — Максимальний підмасив назад до уроку Максимальний підмасивважливість: 2 На вході масив чисел, наприклад Завдання: знайти неперервний підмасив Написати функцію Наприклад:
Якщо всі елементи менші нуля, нічого не беремо, це означає, що підмасив пустий, а сума рівна нулю:
Будь ласка, подумайте над швидким рішенням: O(n2) або навіть над рішенням O(n), якщо зможете. Повільне рішенняМи можемо порахувати всі можливі підсуми. Найпростіший шлях – це порахувати суми всіх підмасивів, починаючи з кожного елемента. Наприклад, для
Вирішення потребує використання циклів: зовнішний цикл проходить по елементах масиву, а внутрішній рахує підсуму починаючи з поточного елементу.
Таке рішення має оцінку часу виконання O(n2). Інакше кажучи, якщо ми збільшимо розмір масиву вдвічі, алгоритм буде виконуватися в 4 рази довше. Для великих масивів (1000, 10000 або більше елементів) подібні алгоритми можуть призводити до серйозних “пригальмувань” в роботі. Швидке рішенняПройдемося по масиву і в процесі будемо накопичувати проміжну суму елементів в змінній Якщо пояснення не дуже зрозуміле, подивіться, будь ласка, на код – він досить лаконічний:
Цей алгоритм потребує рівно один прохід по масиву, його оціночний час виконання – O(n). Ви можете дізнатися більше про цей алгоритм тут: Maximum subarray problem. Якщо досі не зрозуміло, як це працює, будь ласка, подивіться алгоритм у прикладах вище, це буде краще за будь-які слова. |
| You are visitor 01402503 — GeezerVison does not store the pages you look up. Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required. |