Diferente pentru heapuri intre reviziile #62 si #63

Nu exista diferente intre titluri.

Diferente intre continut:

Practic operatia aceasta nu are de facut decat sa intoarca valoarea primului element din vector:
==code(c) |
inline int max(Heap h) {
    return h[1];
inline int max(Heap H) {
    return H[1];
}
==
Procedura sift primeste ca parametri un heap $H$ cu $N$ noduri si un nod $K$ si presupune ca ambii subarbori ai nodului $K$ au structura de heap corecta. Misiunea ei este sa "cearna" nodul $K$ pana la locul potrivit, interschimband mereu nodul cu cel mai mare fiu al sau pana cand nodul nu mai are fii (ajunge pe ultimul nivel in arbore) sau pana cand fiii sai au valori mai mici decat el.
==code(c) |
void sift(Heap H, int N, int K)
{ int Son;
void sift(Heap H, int N, int K) {
    int son;
  /* Alege un fiu mai mare ca tatal */
  if (K<<1<=N)
    {
      Son=K<<1;
      if (K<<1<N && H[(K<<1)+1 ] > H[ (K<<1) ])
        Son++;
      if (H[Son]<=H[K]) Son=0;
    }
  else Son=0;
  while (Son)
    { /* Schimba H[K] cu H[Son] */
      H[K]=(H[K]^H[Son]) ^ (H[Son]=H[K]);
      K=Son;
      /* Alege un alt fiu */
      if (K<<1<=N)
        { Son=K<<1;
          if (K<<1<N && H[ (K<<1)+1 ] > H[ (K<<1) ])
            Son++;
          if (H[Son]<=H[K]) Son=0;
    do {
        // Alege un fiu mai mare ca tatal.
        if (left_son(K) <= N) {
            son = left_son(K);
            if (left_son(K) < N && H[right_son(K)] > H[left_son(K)])
                son = right_son(K);
            if (H[son] <= H[K]) {
                son = 0;
            }
        } else {
            son = 0;
        }
        else Son=0;
    }
 
        if (son) {
            swap(H[K], H[son]);  // Functie STL ce interschimba H[K] cu H[son].
            K = son;
        }
    } while (son);
}
==
*Feedback (Stefan):* As sugera transformarea problemei intr-una mai utila si mai putin fortata: Sa se interclaseze in mod eficient $K$ vectori sortati.
*Feedback (Cosmin):* Merge problema, zic ca trebuie bagata, eventual daca e prea artificiala o punem ultima. E misto problema lui Stefan, alta problema ar fi sa se determine cele mai mici k elemente dintr-un sir de lungime n daca ai memorie << O(n). In cod ar trebui schimbate siftarile cu 1 cu inmultiri si impartiri cu 2, si pare mai putin exoteric codul. Alta chestie, am putea numi articolul cozi de prioritati si sa mentionam heapuri interclasabile, sau cozi de prioritati cand costurile sunt mici. Am putea sa bagam observatiile cu celelalte cozi de prioritati ca si in Cormen intr-o sectiune la sfarsitul articolului cu extinderi.
*Feedback (Cosmin):* Merge problema, zic ca trebuie bagata, eventual daca e prea artificiala o punem ultima. E misto problema lui Stefan, alta problema ar fi sa se determine cele mai mici k elemente dintr-un sir de lungime n daca ai memorie << O(n). In cod ar trebui schimbate siftarile cu 1 cu inmultiri si impartiri cu 2, si pare mai putin exoteric codul. Alta chestie, am putea numi articolul cozi de prioritati si sa mentionam heapuri interclasabile, sau cozi de prioritati cand costurile sunt mici. Am putea sa bagam observatiile cu celelalte cozi de prioritati ca si in Cormen intr-o sectiune la sfarsitul articolului cu extinderi.
Exemple vreicat mai multe sa dai,pt calumea crede ca heapurile folosesc numai la heap sort si e bine sa schimbam ideea asta. Parerea mea e ca orice concept nou trebuie explicat cu 3 exemple care nu sunt inrudite ca sa il intelegi k lumea.
Daca articolul e prea lung ar fimisto sa avem ceva butoane care expandeaza bucati din articol, sau celputin un cuprins la inceput, daca te intereseaza implementarea sau aplicatiile sa poti sari rapid la ce te intereseaza.
Merg cele doua probleme puse ca exercitii.
*End Feedback (Cosmin)*
 
h2. Problema
Sperand ca am reusit sa explicam modul de functionare al unui heap, .

Nu exista diferente intre securitate.

Topicul de forum nu a fost schimbat.