O problema obisnuita cu care cei mai multi programatori sunt familiarizati este sa imbine doua tablouri sortate intr-o singura matrice sortata. Este de fapt una dintre primele probleme pe care le invatam aici la Outco in saptamana 1. Abordarea este destul de simpla si implica doar utilizarea a doi indicatori pentru a gasi urmatorul element cel mai mare dintre cele doua matrice si adaugarea acestuia la rezultatul final. Timpul necesar depinde doar de cate elemente exista in cele doua matrice si, in afara de matricea de rezultate, veti avea nevoie doar de doi indicatori pentru a urmari locul in care va aflati in fiecare matrice.

Intrare: [1, 3, 5, 7], [2, 4, 6, 8] Iesire: [1, 2, 3, 4, 5, 6, 7, 8]

Dar daca numarul de matrice ar fi variabil? Ce se intampla daca in loc de doua matrice, ati putea avea 10, 20 sau 100? Exista vreo modalitate de a extrapola aceasta abordare si de a gasi o solutie generala pentru un numar arbitrar de tablouri?

Intrare: [[1, 10, 11, 15], [2, 4, 9, 14], [5, 6, 8, 16], [3, 7, 12, 13]] Iesire: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]

Se pare ca exista, dar trebuie sa ne schimbam putin gandirea despre problema. Doua intrebari utile pe care trebuie sa le puneti sunt „cum modifica problema existenta unui numar variabil de tablouri?” si „cum modifica problema avand mai mult de doua matrice?”.

Este util sa stiti cate matrice aveti de la inceput, deoarece veti sti exact cate indicii veti avea nevoie de fiecare data. Pentru doua tablouri puteti codifica hard intr-un singur pointer pentru fiecare matrice. Cand numarul de matrice variaza, veti avea nevoie de un mod diferit de a va urmari indicii, probabil intr-o matrice.

Dar mai exista ceva care se intampla atunci cand aveti mai mult de doua tablouri, care este ceva mai subtil. Cand aveti doua tablouri, va trebui sa efectuati o singura comparatie per iteratie pentru a gasi cel mai mic dintre cele doua elemente. Cu toate acestea, acesta este doar un caz special si aceasta comparatie in timp constant nu se amplifica. Cu trei tablouri, va trebui sa efectuati trei comparatii pentru a gasi cel mai mic element. Cu 4 tablouri va trebui sa faceti 4 comparatii si asa mai departe.

xxx gratis en español follando rico
mamadas por dinero pornoxxxxx
follando a mi hija porno español jovencitas
se folla a su cuñada comic porno español

folladoras cincuentonas follando
porno español años 70 xxx abuelas
todoporno pono gay
suegras peludas danna paola desnuda
copilacion de mamadas culos porno
porno gay españoles corridas en la garganta
madres haciendo pajas a sus hijos chochitos jovencitos
penes enormes orgias caseras
randy dave intercambio parejas amateur
comiendo tetas el video porno mas visto en internet
masajes eroticos chinos follando en el campo
maduras gordas desnudas pajas caseras
porno casero colombiano cachondas españolas
porno muy duro me hace una paja
super maduras videos porno caseros españoles

Dupa un anumit numar de tablouri, devine mai eficient sa concatenam toate tablourile impreuna si sa aplicam o functie de sortare eficienta asupra rezultatului.

Complexitatea in timp a efectuarii K compara fiecare iteratie: O (N * K * K) Complexitatea in timp a concatenarii si sortarii: O (N * K * log (N * K))

Dar concatenarea si apoi sortarea distrug orice informatie pe care ati fi putut-o folosi despre matrice inainte de a fi sortate individual si, desi este mai eficienta, este inca considerata abordarea naiva . Nu este diferita din punct de vedere al complexitatii timpului decat ar fi fuzionarea si sortarea K matrice nesortate.

Intuitiv, ar trebui sa puteti deduce ca matricile care sunt sortate sunt utile si ca informatiile pot fi utilizate intr-un fel.

Se pare ca cheia acestei probleme este ca trebuie sa cunoasteti cel mai mic element actual din toate matricile si sa aveti capacitatea de a gasi urmatorul cel mai mic in mod eficient.

Aici intervin gramezi in ecuatie.

O gramada binara este similara unei cautari binare prin faptul ca exista o relatie intre nodurile parinte si copil. Diferenta consta in relatia respectiva. Intr-un BST, copiii din dreapta sunt mai mari decat parintii lor, iar copiii din stanga sunt mai mici.

Dar intr-un min-heap binar, nodurile parinte sunt mai mici decat ambii copiii lor, toate nodurile sunt inserate in ordinea latimii prime si nu exista nicio relatie intre nodurile frate. Relatiile pot fi, de asemenea, usor reprezentate intr-o matrice ca o formula matematica intre indici.

Pentru un index dat i

Este doi copii vor fi la (2i + 1) si (2i + 2) Deci copiii nodului de la indexul 10 vor fi la 21 si 22.

Daca nu sunteti foarte familiarizati cu gramezile binare, va recomand sa le periati aici:

Acestea sunt structuri de date foarte utile atunci cand trebuie sa mentineti un fel de comanda libera si nu doriti cheltuielile generale de sortare.

Si tocmai acea proprietate de a fi aproape sortat ii face atat de utili. De fapt, matricile sortate sunt un tip special de min-heap, dar nu avem nevoie ca structura noastra de date sa fie atat de stricta. In orice moment, trebuie doar sa avem la indemana urmatorul cel mai mic element. Si gramezile fac acest lucru foarte simplu:

Iata solutia mea in 7 pasi:

Codul ar putea parea putin complex la inceput, dar majoritatea metodelor se bazeaza una pe alta destul de bine. Daca aveti o buna intelegere a gramezilor, aceasta problema ar trebui sa apara de la sine. Si, asa cum am spus mai devreme, gramezile sunt structuri de date incredibil de utile de inteles.

Iata un esential: