logo

Шта је приоритетни ред?

Приоритетни ред је апстрактни тип података који се понаша слично нормалном реду, осим што сваки елемент има неки приоритет, тј. елемент са највишим приоритетом би био први у реду приоритета. Приоритет елемената у приоритетном реду ће одредити редослед којим се елементи уклањају из приоритетног реда.

Приоритетни ред подржава само упоредиве елементе, што значи да су елементи распоређени у растућем или опадајућем редоследу.

јава изузеци

На пример, претпоставимо да имамо неке вредности као што су 1, 3, 4, 8, 14, 22 уметнуте у приоритетни ред са редоследом наметнутим вредностима од најмање до највеће. Према томе, број 1 би имао највећи приоритет, док ће 22 имати најнижи приоритет.

Карактеристике приоритетног реда

Приоритетни ред је проширење реда које садржи следеће карактеристике:

  • Сваки елемент у приоритетном реду има неки приоритет повезан са њим.
  • Елемент са вишим приоритетом биће обрисан пре брисања мањег приоритета.
  • Ако два елемента у приоритетном реду имају исти приоритет, они ће бити распоређени по ФИФО принципу.

Хајде да разумемо приоритетни ред кроз пример.

Имамо приоритетни ред који садржи следеће вредности:

1, 3, 4, 8, 14, 22

Све вредности су распоређене у растућем редоследу. Сада ћемо посматрати како ће приоритетни ред изгледати након извођења следећих операција:

    анкета():Ова функција ће уклонити елемент највишег приоритета из реда приоритета. У горњем реду приоритета, елемент '1' има највиши приоритет, тако да ће бити уклоњен из реда приоритета.додај(2):Ова функција ће уметнути '2' елемент у приоритетни ред. Како је 2 најмањи елемент међу свим бројевима, тако ће добити највећи приоритет.анкета():Уклониће елемент '2' из реда приоритета јер има ред са највећим приоритетом.додај(5):Убациће 5 елемента после 4 пошто је 5 веће од 4 и мање од 8, тако да ће добити трећи највећи приоритет у реду приоритета.

Типови приоритетних редова

Постоје две врсте приоритетног реда:

    Узлазни ред приоритета редоследа:У растућем реду приоритета, број нижег приоритета се даје као виши приоритет у приоритету. На пример, узимамо бројеве од 1 до 5 поређане у растућем редоследу као што је 1,2,3,4,5; према томе, најмањи број, тј. 1 је дат као највећи приоритет у приоритетном реду.
    Приоритетни ред Ред опадајућег приоритета редоследа:У реду приоритета у опадајућем редоследу, број већег приоритета се даје као виши приоритет у приоритету. На пример, узимамо бројеве од 1 до 5 поређане у опадајућем редоследу као што су 5, 4, 3, 2, 1; према томе, највећи број, тј. 5 је дат као највиши приоритет у приоритетном реду.
    Приоритетни ред

Представљање приоритетног реда

Сада ћемо видети како да представимо приоритетни ред кроз једносмерну листу.

Направићемо приоритетни ред користећи доле дату листу у којој ИНФО листа садржи елементе података, ПРН листа садржи приоритетне бројеве сваког елемента података који је доступан у ИНФО листа, а ЛИНК у основи садржи адресу следећег чвора.

Приоритетни ред

Хајде да креирамо приоритетни ред корак по корак.

јава сортирање низа

У случају редоследа приоритета, број нижег приоритета се сматра вишим приоритетом, тј. број нижег приоритета = виши приоритет.

Корак 1: У листи, број нижег приоритета је 1, чија је вредност података 333, тако да ће бити убачен у листу као што је приказано на дијаграму испод:

Корак 2: Након уметања 333, приоритет број 2 има већи приоритет, а вредности података повезане са овим приоритетом су 222 и 111. Дакле, ови подаци ће бити уметнути на основу ФИФО принципа; стога ће се прво додати 222, а затим 111.

Корак 3: Након уметања елемената приоритета 2, следећи већи приоритетни број је 4, а елементи података придружени 4 приоритетна броја су 444, 555, 777. У овом случају, елементи би се убацивали на основу ФИФО принципа; стога ће се прво додати 444, затим 555, а затим 777.

4. корак: Након уметања елемената приоритета 4, следећи већи број приоритета је 5, а вредност придружена приоритету 5 је 666, тако да ће бити уметнута на крају реда.

Приоритетни ред

Имплементација приоритетног реда

Приоритетни ред се може имплементирати на четири начина који укључују низове, повезану листу, структуру података у хрпи и стабло бинарног претраживања. Структура података гомиле је најефикаснији начин имплементације приоритетног реда, тако да ћемо у овој теми имплементирати приоритетни ред користећи структуру података гомиле. Сада, прво разумемо разлог зашто је хрпа најефикаснији начин међу свим осталим структурама података.

Анализа сложености коришћењем различитих имплементација

Имплементација додати Уклони завирити
Повезана листа О(1) На) На)
Бинарна гомила О(пријава) О(пријава) О(1)
Бинарно стабло претраге О(пријава) О(пријава) О(1)

Шта је Хеап?

Хрпа је структура података заснована на стаблу која формира комплетно бинарно стабло и задовољава својство хрпе. Ако је А родитељски чвор Б, онда је А уређено у односу на чвор Б за све чворове А и Б у гомили. То значи да вредност родитељског чвора може бити већа или једнака вредности подређеног чвора, или вредност родитељског чвора може бити мања или једнака вредности подређеног чвора. Дакле, можемо рећи да постоје две врсте гомила:

    Максимална гомила:Максимална гомила је гомила у којој је вредност родитељског чвора већа од вредности подређених чворова.
    Приоритетни ред Мин. хрпа:Мин. хрпа је гомила у којој је вредност родитељског чвора мања од вредности подређених чворова.
    Приоритетни ред

Обе гомиле су бинарна гомила, пошто свака има тачно два подређена чвора.

Операције приоритетног реда

Уобичајене операције које можемо да извршимо на приоритетном реду су уметање, брисање и завиривање. Хајде да видимо како можемо да одржавамо структуру података гомиле.

    Уметање елемента у приоритетни ред (максимална гомила)

Ако убацимо елемент у приоритетни ред, он ће се померити на празан слот гледајући одозго према доле и са лева на десно.

стринг.валуеоф јава

Ако елемент није на исправном месту онда се упоређује са родитељским чвором; ако се утврди да није у реду, елементи се замењују. Овај процес се наставља све док се елемент не постави у исправан положај.

Приоритетни ред
Приоритетни ред
    Уклањање минималног елемента из реда приоритета

Као што знамо да је у максималној хрпи, максимални елемент основни чвор. Када уклонимо основни чвор, он ствара празан слот. Последњи уметнути елемент биће додат у овај празан слот. Затим се овај елемент пореди са подређеним чворовима, тј. левим дететом и десним дететом, и замењује се мањим од та два. Наставља се померати низ стабло све док се својство гомиле не обнови.

Апликације приоритетног реда

Следеће су апликације приоритетног реда:

  • Користи се у Дијкстрином алгоритму најкраћег пута.
  • Користи се у Примовом алгоритму
  • Користи се у техникама компресије података као што је Хафманов код.
  • Користи се у сортирању гомиле.
  • Такође се користи у оперативном систему као што је распоређивање приоритета, балансирање оптерећења и руковање прекидима.

Програм за креирање приоритетног реда користећи бинарну максималну хрпу.

 #include #include int heap[40]; int size=-1; // retrieving the parent node of the child node int parent(int i) { return (i - 1) / 2; } // retrieving the left child of the parent node. int left_child(int i) { return i+1; } // retrieving the right child of the parent int right_child(int i) { return i+2; } // Returning the element having the highest priority int get_Max() { return heap[0]; } //Returning the element having the minimum priority int get_Min() { return heap[size]; } // function to move the node up the tree in order to restore the heap property. void moveUp(int i) { while (i &gt; 0) { // swapping parent node with a child node if(heap[parent(i)] <heap[i]) 2 { int temp; temp="heap[parent(i)];" heap[parent(i)]="heap[i];" heap[i]="temp;" } updating the value of i to function move node down tree in order restore heap property. void movedown(int k) index="k;" getting location left child if (left heap[index]) right (right k is not equal (k !="index)" heap[index]="heap[k];" heap[k]="temp;" movedown(index); removing element maximum priority removemax() r="heap[0];" heap[0]="heap[size];" size="size-1;" movedown(0); inserting a queue insert(int p) + 1; heap[size]="p;" up maintain property moveup(size); from at given i. delete(int i) stored ith shifted root moveup(i); having removemax(); main() elements insert(20); insert(19); insert(21); insert(18); insert(12); insert(17); insert(15); insert(16); insert(14); printf('elements are : '); for(int printf('%d ',heap[i]); delete(2); deleting whose 2. printf('
elements after max="get_Max();" printf('
the which highest %d: ',max); min="get_Min();" minimum %d',min); return 0; < pre> <p> <strong>In the above program, we have created the following functions:</strong> </p> <ul> <tr><td>int parent(int i):</td> This function returns the index of the parent node of a child node, i.e., i. </tr><tr><td>int left_child(int i):</td> This function returns the index of the left child of a given index, i.e., i. </tr><tr><td>int right_child(int i):</td> This function returns the index of the right child of a given index, i.e., i. </tr><tr><td>void moveUp(int i):</td> This function will keep moving the node up the tree until the heap property is restored. </tr><tr><td>void moveDown(int i):</td> This function will keep moving the node down the tree until the heap property is restored. </tr><tr><td>void removeMax():</td> This function removes the element which is having the highest priority. </tr><tr><td>void insert(int p):</td> It inserts the element in a priority queue which is passed as an argument in a function <strong>.</strong>  </tr><tr><td>void delete(int i):</td> It deletes the element from a priority queue at a given index. </tr><tr><td>int get_Max():</td> It returns the element which is having the highest priority, and we know that in max heap, the root node contains the element which has the largest value, and highest priority. </tr><tr><td>int get_Min():</td> It returns the element which is having the minimum priority, and we know that in max heap, the last node contains the element which has the smallest value, and lowest priority. </tr></ul> <p> <strong>Output</strong> </p> <img src="//techcodeview.com/img/ds-tutorial/03/what-is-priority-queue-9.webp" alt="Priority Queue"> <hr></heap[i])>