Селекциони алгоритам — разлика између измена

Садржај обрисан Садржај додат
мНема описа измене
мНема описа измене
Ред 62:
Када се тражи само минимум (или максимум), добар приступ је коришћење [[Хип (структура података)|хипа]] који налази минимални (или максимални) елемент у константном времену, док су све остале операције, укључујући уметање, О(log ''n'') сложености или ефикасније. Уопштено говорећи, самобалансирајуће бинарно стабло претраге се може надоградити тако да омогући уметање елемента као и проналажење ''k''-тог највећег елемента у О(log ''n'') времену. Једноставно у сваком чвору чувамо број његових потомака и користимо ово да одредимо којим путем ћемо се даље кретати. Бројач се ефикасно може ажурирати јер додавање чвора утиче само на О(log ''n'') његових предака, а ротације стабла утичу само на бројаче чворова који су ротирани.
 
Још једна једноставна стратегија је коришћење [[хеш табела]]. Када унапред знамо опсег вредности, можемо поделити тај опсег на ''h'' подинтервала и доделити им ''h'' поља. Када умећемо елемент, уписујемо га у поље којакоје одговара интервалу у који тај елемент пада. Да бисмо пронашли минимални или максимални елемент, у табели тражимо од почетка или од краја прво непразно поље и тражимо минимални или максимални елемент у њему. Генерално, за проналажење ''k''-тог елемента, памтимо број елемената у сваком пољу и онда претражујемо поља слева надесно сабирајући бројаче док не стигнемо до поља које садржи тражени елемент. Жељени елемент се у том пољу може пронаћи за очекивано линеарно време.
 
Ако изаберемо ''h'' да буде приближно {{sqrt|''n''}}, за улаз који је приближно равномерно распоређен, овај алгоритам може да извршава селекције у очекиваном О({{sqrt|''n''}}) времену. Нажалост, ова стратегија је осетљива на груписање елемената у уске интервале, што може довести до ћелија са великим бројем елемената (груписање се може елиминисати одабиром добре хеш функције, али проналажење елемента са ''k''-том највећом хеш вредношћу није веома корисно). Додатно, као и хеш табеле, ова структура захтева промену величине табеле како би се одржала ефикасност у случајевима када ''n'' постане много веће од ''h''<sup>2</sup>.