АСП2/К1 2009
Први колоквијум 2009. године одржан је 29. октобра 2009. Поставка задатака је доступна са странице предмета.
1. задатак
Поставка
(20п)
- Објаснити стратегију бинарног претраживања. Који су предуслови примене бинарне претраге? Које услове мора да задовољи структура података над којом се примењује бинарно претраживање да би примена била ефикасна?
- Над табелом у коју су уметнути кључеви 2, 18, 33, 14, 25, 5, 7, 12, 11, 16, 20, 22, 26 се врши претрага на кључеве 14, 7 и 18 применом стратегије бинарног претраживања. Одредити просечан број поређења вредности кључева.
- Написати на језику C (или C++) функцију која у задатом низу целих бројева задате дужине тражи задати целобројни кључ. Функција враћа индекс под којим је кључ нађен у низу или -1 у случају неуспешне претраге.
Решење
- Стратегија бинарног претраживања се заснива на налажењу медијане, а затим половљењу интервала претраживања. Поступак се понавла све док се не нађе тражени кључ или се закључи да се он не налази у низу. Предуслови су да је низ уређен и да је могућ линеаран приступ. Структура мора бити линеарна.
- При претрази на кључ 14 врше се 4 поређења, као и при претрази на кључ 18. При претрази на кључ 7 врше се 2 поређења, што нам у просеку даје поређења.
BIN(arr, key, n) high = n; low = 1; while(high>=low) mid = (low+high)/2; if(arr[mid]=key) return mid; if(arr[mid]<key) low = mid+1; else high = mid-1; end_while return -1;
2. задатак
Поставка
(30п) У АВЛ стабло приказано на слици се редом умећу следећи кључеви: 20, 21, 19, 7, 10, 12, 14. Након уметања се редом бришу кључеви: 22, 15, 18. Приказати изглед стабла након сваке од наведених измена. Израчунати просечан број приступа стаблу приликом успешне претраге након свих уметања и у коначном стању. Напомена: приликом брисања кључева, користити следбенике.
Решење
Након свих уметања: , па је
Након свих брисања: , па је .
3. задатак
Поставка
(20п) Дати псеудокод и објаснити алгоритам за истовремено секвенцијално претраживање уређеног низа на више кључева. Колика је сложеност алгоритма?
Решење
Претраживање иде од почетка низа К са првим кључем из С док се не пронађе (и његова позиција запамти у П) или до прве веће вредности. Претраживање на следећи кључ из С почиње тамо где се са претраживањем на претходни кључ стало, па се зато низ К пролази само једном. Низ К је растуће уређени низ са н кључева који се претражује на појаву м кључева задатих у низу С. Излаз представља вектор П где се на позицији која одговара кључу у низу С налази позиција кључа у низу К, ако се он тамо пронађе, или вредност 0 ако се не пронађе. Сложеност овог алгоритма је О(н) за случај када је м << н.
SEQ-SEARCH-MUL(K,S)
for(int i=0;i<m;i++) P[i] = 0;
i=j=1;
while(i<=n) and (j<=m)
while(i<n) and (S[j] > K[i]) i++;
if(S[j] = K[i]) P[j] = i;
j++;
end_while
return P;
4. задатак
Поставка
(30п) Питања:
- Колике су перформансе претраживања у стаблу бинарног претраживања у најбољем, средњем и најгорем случају и дискутовати импликације.
- Дефинисати Фибонацци-јева стабла и навести њихове главне особине.
- Зашто се уводе 2-3 стабла? Објаснити њихову организацију и главне особине.
Решење
- Сложеност је у функцији висине - О(х). У најбољем случају х = лог(н), а у најгорем х = н.
- Фибоначијево стабло је најгори случај АВЛ стабла, тј. стабло највеће висине за одређен број чворова. Број чворова у Фибоначијевом стаблу висине х је . Сви чворови имају баланс 1. Брисање било ког чвора смањује висину стабла. Сваки корен ће бити Фибоначијев број.
- 2-3 стабла се уводе да би се осигурала балансираност, па су све операције О(лог(н)). Главно својство је постојање 3-чворова, који имају лево, десно и средње подстабло, и тиме се омогућава да сви листови буду на истом нивоу. 3-чворови имају два кључа, К1 и К2 и у зависности од интервала припадања одређујемо подстабло.