If you're seeing this message, it means we're having trouble loading external resources on our website.

Ако си зад уеб филтър, моля, увери се, че домейните *. kastatic.org и *. kasandbox.org са разрешени.

Основно съдържание

Алгоритми "разделяй и владей"

Двата алгоритъма за сортиране, които разгледахме досега, сортиране чрез пряка селекция (selection sort) и сортиране чрез вмъкване (insertion sort), имат най-лошо време за изпълнение Θ(n2). Когато размерът на входния масив е голям, изпълнението на тези алгоритми може да отнеме много време. В този и в следващия урок ще разгледаме други два алгоритъма за сортиране, сортиране чрез сливане (merge sort) и бързо сортиране (quick sort), които имат по-добро време за изпълнение. По-конкретно, сортиране чрез сливане се изпълнява за време Θ(nlgn) във всички случаи, а бързото сортиране се изпълнява за време Θ(nlgn) в най-добрия случай, а времето за изпълнение в най-лошия случай е Θ(n2). На таблицата са представени четирите алгоритъма със съответното им време за изпълнение:
АлгоритъмНай-лошо време за изпълнениеНай-добро време за изпълнениеСредно време за изпълнение
Сортиране чрез пряка селекцияΘ(n2)Θ(n2)Θ(n2)
Сортиране чрез вмъкванеΘ(n2)времеΘ(n)Θ(n2)
Сортране чрез сливанеΘ(nlgn)Θ(nlgn)Θ(nlgn)
Бързо сортиранеΘ(n2)Θ(nlgn)Θ(nlgn)

Разделяй и владей

И двата алгоритъма споделят обща алгоритмична парадигма, базирана на рекурсия. Тази парадигма, наречена разделяй и владей разделя задачата на подзадачи, които са подобни на първоначалната задача, решава ги рекурентно и накрая комбинира решението, за да реши първоначалната задача. Тъй като "разделяй и владей" решава подзадачите рекурентно, всяка подзадача трябва да е по-малка от първоначалната задача и трябва да има базов случай за всяка подзадача. Алгоритъмът "разделяй и владей" може да се раздели на 3 части:
  1. Разделя задачата на подзадачи, които са по-малки инстанции на същата задача.
  2. Овладява подзадачите, като ги решава рекурентно. Ако са достатъчно малки, решава подзадачите като базови случаи.
  3. Комбинира решенията на подзадачите в решение на първоначалната задача.
Можеш лесно да запомниш стъпките на алгоритъма "разделяй и владей", като разделяй, владей, комбинирай. Ето как можем да представим една стъпка, като приемем, че всяка стъпка на разделяне създава две подзадачи (макар че някои алгоритми "разделяй и владей" могат да създадат повече от две):
Ако разширим с още две рекурентни стъпки, ще изглежда така:
Тъй като алгоритъмът "разделяй и владей" създава поне две подзадачи, този алгоритъм прави няколко рекурентни извиквания.

Това съдържание е резултат от съвместната дейност на преподавателите по Компютърни науки в Дартмут Thomas Cormen и Devin Balkcom, както и на екипа по компютърни науки на Кан Академия. Съдържанието е лицензирано CC-BY-NC-SA.

Искаш ли да се присъединиш към разговора?

Все още няма публикации.
Разбираш ли английски? Натисни тук, за да видиш още дискусии в английския сайт на Кан Академия.