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), имат най-лошо време за изпълнение \Theta, left parenthesis, n, squared, right parenthesis. Когато размерът на входния масив е голям, изпълнението на тези алгоритми може да отнеме много време. В този и в следващия урок ще разгледаме други два алгоритъма за сортиране, сортиране чрез сливане (merge sort) и бързо сортиране (quick sort), които имат по-добро време за изпълнение. По-конкретно, сортиране чрез сливане се изпълнява за време \Theta, left parenthesis, n, \lg, n, right parenthesis във всички случаи, а бързото сортиране се изпълнява за време \Theta, left parenthesis, n, \lg, n, right parenthesis в най-добрия случай, а времето за изпълнение в най-лошия случай е \Theta, left parenthesis, n, squared, right parenthesis. На таблицата са представени четирите алгоритъма със съответното им време за изпълнение:
АлгоритъмНай-лошо време за изпълнениеНай-добро време за изпълнениеСредно време за изпълнение
Сортиране чрез пряка селекция\Theta, left parenthesis, n, squared, right parenthesis\Theta, left parenthesis, n, squared, right parenthesis\Theta, left parenthesis, n, squared, right parenthesis
Сортиране чрез вмъкване\Theta, left parenthesis, n, squared, right parenthesisв, р, е, м, е, \Theta, left parenthesis, n, right parenthesis\Theta, left parenthesis, n, squared, right parenthesis
Сортране чрез сливане\Theta, left parenthesis, n, \lg, n, right parenthesis\Theta, left parenthesis, n, \lg, n, right parenthesis\Theta, left parenthesis, n, \lg, n, right parenthesis
Бързо сортиране\Theta, left parenthesis, n, squared, right parenthesis\Theta, left parenthesis, n, \lg, n, right parenthesis\Theta, left parenthesis, n, \lg, n, right parenthesis

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

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

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

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

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