Clasele 9-10 lecția 24 - 25 mar 2015

From Algopedia
Jump to navigationJump to search

Algoritmul lui Euclid extins

Întrucât nu-mi place să-mi las bâlbele necorectate, :-) iată o explicație mai clară pentru Algoritmul lui Euclid extins.

Știm să calculăm cel mai mare divizor comun cu algoritmul lui Euclid (simplu). Fie

Numărul d mai are o proprietate interesantă: el este cel mai mic întreg pozitiv care poate fi scris ca

, unde x și y sunt numere întregi.

Această formulă se numește identitatea lui Bézout. Puteți găsi o demonstrație aici.

Algoritmul lui Euclid extins calculează nu doar d, ci și x și y. Fie a = 378, b = 60 și să considerăm calculele făcute de algoritmul lui Euclid simplu. El înlocuiește, repetitiv, perechea cu perechea :

a b d
378 60
60 18
18 6
6 0 6

De aici, valoarea lui d se propagă pur și simplu în sus, datorită egalității :

a b d
378 60 6
60 18 6
18 6 6
6 0 6

Acum vrem să calculăm, pe parcurs, și valorile x și y. Pe ultima linie ele sunt banal de calculat, căci b este 0.

a b d x y
378 60
60 18
18 6
6 0 6 1 0

Cum propagăm aceste valori în sus? Mai exact, dacă am descoperit că

cum aflăm x și y astfel încât

?

Fie . Atunci avem sistemul de ecuații în x și y:

Le reformulăm în funcție de b și r:

și obținem

Cu această formulă putem completa tabelul:

a b d x y
378 60 6 -3 19
60 18 6 1 -3
18 6 6 0 1
6 0 6 1 0

Anexez media:extendedEuclid.cpp pentru o implementare recursivă și una iterativă.

Aplicație

Algoritmul lui Euclid extins poate fi folosit pentru a afla inversele elementelor în . Pentru a calcula inversul lui a, aplicăm algoritmul lui Euclid extins pentru a și n. Prin definiție , căci altfel inversul lui a nu este definit. Calculăm x și y cu algoritmul lui Euclid extins a. î. . Rezultă în mod trivial că , deci x este inversul lui a.

Skip lists

Skip lists sunt o structură utilă la modul general. Ea ne oferă complexitate sau mai bun pentru majoritatea operațiilor:

  • inserare
  • ștergere
  • căutare
  • aflarea elementului anterior / următor
  • aflarea elementului minim / maxim
  • numărarea elementelor mai mici / mai mari decât un element
  • aflarea celui de-al k-lea element ca valoare

Ca și arborii echilibrați, skip lists sunt un fel de „briceag elvețian” al structurilor de date. Ele se codează mai ușor și folosesc mai puțină memorie decât arborii echilibrați. Sigur, nu trebuie să le folosiți fără măsură, ignorând soluții mai deștepte.

Vom urma notele de la clasele 11-12.

Temă