Video: ?Introducere in Structuri de Date si Algoritmi | Concepte de Programare #1 2024
De John Paul Mueller, Luca Massaron
Algoritmii nu trebuie să fie plictisitori sau greu de folosit. De fapt, algoritmii te înconjoară în multe feluri pe care probabil nu ți-ai gândit și le folosești în fiecare zi pentru a-ți îndeplini sarcini importante. Cu toate acestea, trebuie să puteți utiliza algoritmi fără a trebui să deveniți matematician.
Limbile de programare vă permit să descrieți pașii utilizați pentru a crea un algoritm. Unele limbi sunt mai bune decât altele pentru a îndeplini această sarcină într-un mod care oamenii pot înțelege fără a deveni oameni de știință în domeniul informaticii. Python face folosirea algoritmilor mai ușoară deoarece vine cu o mulțime de suport încorporat și extins (prin utilizarea pachetelor, seturilor de date și a altor resurse). Acest Cheat Sheet vă ajută să accesați cele mai frecvent necesare sfaturi pentru a face utilizarea algoritmilor rapid și ușor.
Localizarea algoritmului de care aveți nevoie
Următorul tabel descrie algoritmi și tipurile de algoritmi pe care le puteți găsi pentru diferite tipuri de analize de date. (Puteți găsi discuții despre toți acești algoritmi în Algoritmi pentru Dummies.)
Algoritm | Descriere | Link util |
A * Caută | Algoritmul urmărește costul nodurilor pe măsură ce le explorează folosind ecuația: f (n) = g (n) + h (n) -
n
este identificatorul nodului g (n) este costul de atingere a nodului până acum h (n) obiectivul de la nod f (n) este costul estimat al căii de la n la obiectivul Ideea este de a căuta mai întâi căile cele mai promițătoare și de a evita căile costisitoare. Standford. edu |
Arbore echilibrat |
Un fel de arbore care păstrează o structură echilibrată prin reorganizare, astfel încât să poată oferi timpi de acces redus. Numărul de elemente din partea stângă diferă de cel din partea dreaptă cu cel mult unul. | Webdocs | Căutarea bidirecțională |
Această tehnică caută simultan de la nodul rădăcină și nodul gol până când cele două căi de căutare se întâlnesc în mijloc. Un avantaj al acestei abordări este că este timpul eficient deoarece găsește soluția mai rapidă decât multe alte soluții de forță brute. În plus, utilizează memoria mai eficient decât alte abordări și întotdeauna găsește o soluție. Principalul dezavantaj este complexitatea implementării. | Planificare. cs | Arbore binar |
Acesta este un tip de copac care conține noduri care se conectează la zero (noduri frunze), unul sau două (noduri ramificative) alte noduri. Fiecare nod definește cele trei elemente pe care trebuie să le includă pentru a asigura conectivitatea și stocarea datelor: stocarea datelor, conectarea la stânga și conexiunea la dreapta. | cs. CMU. edu | Breadth-First Search |
Această tehnică începe la nodul rădăcină, explorează mai întâi fiecare dintre nodurile copilului și doar apoi trece la nivelul următor. Ea progresează nivel după nivel până când găsește o soluție. Dezavantajul acestui algoritm este acela că trebuie să stocheze fiecare nod din memorie, ceea ce înseamnă că utilizează o cantitate considerabilă de memorie pentru un număr mare de noduri. Această tehnică poate verifica noduri duplicate, ceea ce economisește timp și întotdeauna vine cu o soluție. | Academia Khan | Brute Force |
Aceasta este o tehnică de rezolvare a problemelor în care cineva încearcă orice soluție posibilă, căutând cea mai bună soluție de problemă. Tehnicile de forță brută garantează o soluție potrivită atunci când există, dar sunt atât de consumatoare de timp încât majoritatea oamenilor să le evite. | Igm. univ | Depth-First Search |
Această tehnică începe la nodul rădăcină și explorează un set de noduri copil conectate până când ajunge la un nod de frunze. Ea progresează ramificată după ramură până când găsește o soluție. Dezavantajul acestui algoritm este acela că nu poate verifica nodurile duplicate, ceea ce înseamnă că ar putea traversa aceleași căi de nod mai mult decât o dată. De fapt, acest algoritm ar putea să nu găsească deloc o soluție, ceea ce înseamnă că trebuie să definiți un punct de cutoff pentru a menține algoritmul în căutarea infinită. Un avantaj al acestei abordări este că memoria este eficientă. | Hacker Earth | Împărțire și cucerire |
Aceasta este o tehnică de rezolvare a problemelor în care problema este ruptă în cele mai mici piese posibile și rezolvată folosind cea mai simplă abordare posibilă. Această tehnică economisește timp și resurse considerabile în comparație cu alte abordări, cum ar fi forța bruta. Cu toate acestea, nu garantează întotdeauna un rezultat optim. | Academia Khan | Dijikstra |
Acesta este un algoritm folosit pentru găsirea celei mai scurte căi într-un grafic reglat, ponderat (având ponderi pozitive). | Geeks pentru geeks | Graph |
Un grafic este un fel de extensie de copac. Ca și în cazul copacilor, aveți noduri care se conectează reciproc pentru a crea relații. Cu toate acestea, spre deosebire de arborii binari, un grafic poate avea mai mult de una sau două conexiuni. De fapt, nodurile grafice au adesea o multitudine de conexiuni. Veți vedea grafice utilizate în locuri precum hărți pentru GPS și tot felul de alte locuri pentru care abordarea de sus în jos a unui copac nu va funcționa. | Tutoriale | Algoritmi greoi |
Această tehnică a soluționării problemelor în care soluția se bazează pe cel mai bun răspuns pentru fiecare etapă a procesului de rezolvare a problemelor. În general, algoritmii grei fac două ipoteze: |
Alegerea opțiunii optime la fiecare pas este posibilă găsirea unei soluții optime pentru problema generală. Tutoriale |
Greed Best-First Search (BFS) |
Algoritmul alege întotdeauna calea cea mai apropiată de obiectiv utilizând ecuația: | f (n) n). Acest algoritm particular poate găsi soluții destul de repede, dar poate rămâne blocat și în bucle, atât de mulți oameni nu consideră că este o abordare optimă în găsirea unei soluții. Centurion2 Hashing Aceasta este o metodă de predicție a locației unui anumit element de date în structura de date (indiferent de structura care ar putea fi) înainte de ao căuta. Această abordare se bazează pe utilizarea cheilor plasate într-un index. O funcție hash transformă cheia într-o valoare numerică pe care algoritmul o plasează într-o tabelă hash. O tabelă hash oferă mijloacele de a crea un index care indică elemente dintr-o structură de date, astfel încât un algoritm să poată prezice cu ușurință locația datelor. | Tutoriale |
Heap | Acesta este un copac sofisticat care permite inserarea datelor în structura copacilor. Utilizarea inserării datelor face ca sortarea să fie mai rapidă. Puteți clasifica mai departe acești arbori ca grămezi și grămezi min, în funcție de capacitatea arborelui de a furniza imediat valoarea maximă sau minimă prezentă în arbore. | Tutoriale |
Euristica | Aceasta este o tehnică de rezolvare a problemelor care se bazează pe auto-descoperire și produce rezultate suficient de utile (nu neapărat optime, dar suficient de bune) t necesar. Auto-descoperirea este procesul de a permite algoritmului să vă arate o cale potențial utilă unei soluții (dar trebuie să vă bazați pe intuiția și înțelegerea umană pentru a afla dacă soluția este cea potrivită). | Northwest. edu |
MapReduce | Acesta este un cadru pentru a face algoritmii să funcționeze utilizând calculi în paralel (folosind mai multe computere conectate împreună într-o rețea), permițând algoritmilor să își finalizeze soluțiile mai repede. | Hadoop Apache |
Mergesort | Mergesort este o metodă generală de comparare a datelor de sortare. Depinde de o abordare divizată și cucerită pentru îndeplinirea misiunii sale. | Geeks pentru geeks |
Nash Equilibrium | Aceasta este o teorie a jocului în care ceilalți jucători cunosc strategia de echilibru pentru ceilalți jucători, astfel încât nimeni nu are nimic de câștigat prin schimbarea strategiei sale personale. Această teorie este folosită în orice situație ostilă în care jucătorul trebuie să țină seama de deciziile luate de toți ceilalți jucători pentru a câștiga jocul. | Academia Khan |
PageRank | PageRank este un algoritm pentru măsurarea importanței unui nod într-un grafic. Acest algoritm se află la baza algoritmilor principali ai Google pentru alimentarea căutărilor relevante către utilizatori. | Princeton. edu |
Căutarea euristică pură | Acest algoritm extinde nodurile în ordinea costului lor. Menține două liste. Lista închisă conține nodurile pe care le-a explorat deja, iar lista deschisă conține nodurile pe care trebuie să le exploreze în continuare. În fiecare iterație, algoritmul extinde nodul cu cel mai mic cost posibil. Toate nodurile copilului său sunt plasate în lista închisă și se calculează costurile nodului copil individual. Algoritmul trimite nodurile copil cu un cost redus înapoi la lista deschisă și șterge nodurile copil cu un cost ridicat. În consecință, algoritmul efectuează o căutare inteligentă, bazată pe cost, pentru soluție. | World of Computing |
Quicksort | Aceasta este o strategie de sortare generala bazata pe matrice de partitionare a datelor in array-uri mai mici.Depinde de o abordare divizată și cucerită pentru îndeplinirea misiunii sale. | Tutoriale |
Arbore dezechilibrat | Acesta este un arbore care plasează noi elemente de date ori de câte ori este necesar în arbore, fără a ține seama de echilibru. Această metodă de adăugare a elementelor face să crească copacul mai rapid, dar reduce viteza de acces la căutare sau sortare. | Quora |
Diferențierea algoritmilor de la alte structuri matematice | Dacă sunteți ca majoritatea oamenilor, adesea vă aflați zgâriind capul atunci când vine vorba de structurile de matematică, deoarece nimeni nu pare să știe să folosească termenii în mod corect. Este ca și cum oamenii încearcă să facă lucrurile greu! La urma urmei, ce este o ecuație și de ce este diferit de un algoritm? Ei bine, nu vă mai temeți: Următorul tabel oferă ghidul definitiv pentru structurile de matematică pe care ați putea să-l întâlniți, dar cărora le-a fost frică să întrebați. | Structura |
Descriere
Ecuația
Numerele și simbolurile care, luate în ansamblu, sunt egale cu o valoare specifică. O ecuație conține întotdeauna un semn egal, astfel încât să știți că numerele și simbolurile reprezintă valoarea specifică de cealaltă parte a semnalului egal. Ecuațiile conțin în general informații variabile prezentate ca simbol, dar nu li se cere să utilizeze variabile. | Formula |
O combinație de numere și simboluri utilizate pentru a exprima informații sau idei. O formulă prezintă în mod normal concepte matematice sau logice, cum ar fi definirea celui mai mare divizor general (GCD) a două numere întregi (video de la Academia Khan spune cum funcționează acest lucru). În general, o formulă arată relația dintre două sau mai multe variabile. Majoritatea oamenilor văd o formulă ca un fel de ecuație specială. | Algoritm |
O secvență de pași folosiți pentru a rezolva o problemă. Secvența prezintă o metodă unică de abordare a problemei oferind o soluție particulară. Un algoritm nu trebuie să reprezinte concepte matematice sau logice, chiar dacă prezentările din această carte adesea cad în această categorie, deoarece oamenii folosesc cel mai frecvent algoritmi în acest mod. Unele formule speciale sunt, de asemenea, algoritmi, cum ar fi formula patratică. Pentru ca un proces să reprezinte un algoritm, acesta trebuie să fie următorul: | Finite: |
Algoritmul trebuie să rezolve eventual problema. | Definiți bine:
Seria de pași trebuie să fie precisă și să prezinte pași care să fie ușor de înțeles, mai ales prin computere, care trebuie să poată crea un algoritm util. Eficace: Un algoritm trebuie să rezolve toate cazurile de problemă pentru care cineva la definit. Un algoritm trebuie să rezolve întotdeauna problema pe care trebuie să o rezolve. Chiar dacă ar trebui să anticipați unele eșecuri, incidența eșecului este rară și apare numai în situații care sunt acceptabile pentru utilizarea algoritmului dorit. Moduri uimitoare de a utiliza algoritmi Oamenii folosesc de fapt algoritmi tot timpul. De exemplu, crearea de pâine prăjită este un exemplu de algoritm, așa cum este explicat în acest post pe blog. Efectuarea toastului nu este un algoritm uimitor, dar cele din tabelul următor, care utilizează un computer pentru a efectua sarcini, sunt. Sarcina |
De ce este uimitor
Cryptography
Păstrarea datelor în siguranță este o luptă continuă cu hackerii care atacă în mod constant sursele de date. Algoritmii vă permit să analizați datele, să le puneți într-o altă formă și să le returnați mai târziu în forma lor originală. | Analiza grafică |
Capacitatea de a decide cu privire la cea mai scurtă linie între două puncte găsește tot felul de utilizări. De exemplu, într-o problemă de rutare, GPS-ul dvs. nu ar putea funcționa fără acest algoritm special, deoarece nu v-ar putea orienta de-a lungul străzilor orașului folosind cel mai scurt traseu de la punctul A la punctul B. | Generarea de numere pseudorandom |
Imaginați-vă jocurile care nu a variat niciodată. Începeți din același loc și efectuați aceiași pași în același mod de fiecare dată când jucați. Plictisitor! Fără capacitatea de a genera numere aparent aleatorii, multe sarcini de calculator devin inutile sau imposibile. | Planificarea |
Utilizarea corectă a resurselor pentru toți cei interesați este un alt mod în care algoritmii își fac cunoscuți prezența într-un mod mare. De exemplu, luminile de sincronizare la intersecții nu mai sunt simple dispozitive care numără secundele dintre schimbările de lumină. Dispozitivele moderne iau în considerare tot felul de probleme, cum ar fi timpul zilei, condițiile meteorologice și fluxul de trafic. Programarea vine în mai multe forme. Luați în considerare modul în care computerul dvs. execută mai multe sarcini simultan. Fără un algoritm de programare, sistemul de operare ar putea atrage toate resursele disponibile și va împiedica lucrarea dvs. să facă orice lucru util. | Căutarea |
Localizarea informațiilor sau verificarea faptului că informațiile pe care le vedeți sunt informațiile pe care le doriți este o sarcină esențială. Fără această capacitate, multe dintre sarcinile pe care le efectuați online nu ar fi posibile, cum ar fi găsirea site-ului de pe Internet care vinde oala de cafea perfectă pentru biroul dvs. | Sortarea |
Determinarea ordinii de prezentare a informațiilor este importantă deoarece majoritatea oamenilor suferă astăzi de supraîncărcarea informațiilor și trebuie să reducă inflația datelor. Imaginați-vă că mergeți la Amazon, găsiți spre vânzare mai mult de o mie de vase de cafea, dar nu le puteți sorta în funcție de preț sau de cea mai mare revizuire pozitivă. Mai mult, mulți algoritmi complexi necesită date în ordinea corectă de a lucra în mod fiabil, astfel că sortarea este o necesitate importantă pentru rezolvarea mai multor probleme. | Transformarea |
Conversia unui tip de date într-un alt tip de date este esențială pentru înțelegerea și utilizarea eficientă a datelor. De exemplu, s-ar putea să înțelegeți greutățile imperiale, dar toate sursele dvs. utilizează sistemul metric. Convertirea între cele două sisteme vă ajută să înțelegeți datele. De asemenea, transformarea rapidă Fourier (FFT) convertește semnalele între domeniul de timp și domeniul de frecvență, permițând lucruri precum router-ul WiFi să funcționeze. | Abordarea complexității algoritmului |
Știți deja că algoritmii sunt complexe. Cu toate acestea, trebuie să știți cât de complex este un algoritm deoarece este mai complexă, cu atât mai mult este nevoie să îl executați. Următorul tabel vă ajută să înțelegeți diferitele niveluri de complexitate prezentate în ordinea timpului de rulare (de la cel mai rapid la cel mai lent). | Complexitate |
Descriere
Complexitate constantă O (1)
Oferă un timp de execuție neobișnuit, indiferent de cantitatea de intrare pe care o furnizați. Fiecare intrare necesită o singură unitate de timp de execuție. | Complexitatea logaritmică O (log n) |
Numărul de operații crește cu o viteză mai mică decât intrarea, făcând algoritmul mai puțin eficient cu intrări mici și mai eficient cu cele mai mari. Un algoritm tipic din această clasă este căutarea binară. | Complexitatea liniară O (n) |
Operațiile cresc cu intrarea într-un raport 1: 1. Un algoritm tipic este iterația, când scanați o dată intrarea și aplicați o operație fiecărui element al acesteia. | Complexitatea liniaritmică O (n log n) |
Complexitatea este o combinație între complexitatea logaritmică și liniară. Este tipic unii algoritmi inteligenți folosiți pentru a comanda date, cum ar fi Mergesortsort, Heapsort și Quicksort. | Complexitatea patratică O (n |
2 | ) |
Operațiile cresc ca un pătrat al numărului de intrări. Când aveți o iterație în interiorul unei alte iterații (numite iterații imbricate în informatică), aveți complexitate patratică. De exemplu, aveți o listă de nume și, pentru a găsi cele mai similare, comparați fiecare nume cu toate celelalte nume. Alți algoritmi de ordonare mai puțin eficienți prezintă o astfel de complexitate: sortarea bulei, sortarea selecției și sortarea inserției. Acest nivel de complexitate înseamnă că algoritmii dvs. pot funcționa cu ore sau chiar zile înainte de a ajunge la o soluție. Complexitatea cubică O (n 3 | ) |
Operațiile cresc chiar mai repede decât complexitatea cuadratoare, deoarece acum aveți mai multe iterații imbricate. Atunci când un algoritm are această ordine de complexitate și trebuie să procesați o cantitate modestă de date (100, 000 de elemente), algoritmul dvs. poate rula de ani de zile. Când aveți un număr de operații care reprezintă o putere a intrării, este comun să se facă referire la algoritm ca fiind executat în timp polinomial. Complexitatea exponențială O (2 n | ) |
Algoritmul ia dublul numărului de operații anterioare pentru fiecare element adăugat nou. Când un algoritm are această complexitate, chiar și problemele mici pot dura pentru totdeauna. Mulți algoritmi care efectuează căutări exhaustive au complexitate exponențială. Cu toate acestea, exemplul clasic pentru acest nivel de complexitate este calculul numerelor Fibonacci. Complexitatea factorilor O (n!) Acest algoritm prezintă un adevărat coșmar de complexitate datorită numărului mare de combinații posibile dintre elemente. Doar imaginați-vă: Dacă intrarea dvs. este de 100 de obiecte și o operațiune pe computer durează 10 | -6 |
secunde (o viteză rezonabilă pentru fiecare calculator de astăzi), veți avea nevoie de aproximativ 10 | 140 pentru a finaliza cu succes sarcina (un timp imposibil deoarece vârsta universului este estimată la 10 14 ani). O problemă faimoasă a complexității factoriale este problema vânzătorilor care călătoresc, în care un vânzător trebuie să găsească cel mai scurt traseu pentru a vizita multe orașe și pentru a reveni la orașul de plecare.
|