Un algoritm este o tehnică de calcul secvențială bine definită care acceptă o valoare sau o colecție de valori ca intrare și produce rezultatul (ieșirile) necesare pentru a rezolva o problemă.
Sau putem spune că se spune că un algoritm este precis dacă și numai dacă se oprește cu ieșirea adecvată pentru fiecare instanță de intrare.
NEVOIA DE ALGORITMI:
Algoritmii sunt utilizați pentru a rezolva probleme sau pentru a automatiza sarcini într-un mod sistematic și eficient. Sunt un set de instrucțiuni sau reguli care ghidează computerul sau software-ul în realizarea unei anumite sarcini sau în rezolvarea unei probleme.
metode în java
Există mai multe motive pentru care folosim algoritmi:
- Eficiență: algoritmii pot efectua sarcini rapid și precis, făcându-le un instrument esențial pentru sarcini care necesită multe calcule sau procesare a datelor. Consecvență: algoritmii sunt repetabili și produc rezultate consistente de fiecare dată când sunt executați. Acest lucru este important atunci când aveți de-a face cu cantități mari de date sau procese complexe. Scalabilitate: algoritmii pot fi măriți pentru a gestiona seturi mari de date sau probleme complexe, ceea ce îi face utile pentru aplicațiile care necesită procesarea unor volume mari de date. Automatizare: algoritmii pot automatiza sarcini repetitive, reducând nevoia de intervenție umană și eliberând timp pentru alte sarcini. Standardizare: algoritmii pot fi standardizați și partajați între diferite echipe sau organizații, facilitând colaborarea și împărtășirea cunoștințelor oamenilor.
În general, algoritmii sunt un instrument esențial pentru rezolvarea problemelor într-o varietate de domenii, inclusiv informatică, inginerie, analiza datelor, finanțe și multe altele.
Exemplu:
Luați în considerare o cutie în care nimeni nu poate vedea ce se întâmplă înăuntru, spunem o cutie neagră.
Dăm intrare în casetă și ne oferă ieșirea de care avem nevoie, dar procedura pe care ar trebui să o cunoaștem în spatele conversiei intrării în ieșirea dorită este un ALGORITM.
Un algoritm este independent de limbajul folosit. Îi spune programatorului logica folosită pentru a rezolva problema. Deci, este o procedură logică pas cu pas care acționează ca un model pentru programatori.
Exemple din viața reală care definesc utilizarea algoritmilor:
- Luați în considerare un ceas. Știm că ceasul ticăie, dar cum setează producătorul acele piulițe și șuruburi, astfel încât să se miște în continuare la fiecare 60 de secunde, mâna minutelor să se miște și la fiecare 60 de minute, mâna orelor să se miște? Deci, pentru a rezolva această problemă, trebuie să existe un algoritm în spatele ei.
- Ai văzut pe cineva gătindu-ți mâncarea preferată? Este necesara reteta pentru ea? Da, este necesar, deoarece o rețetă este o procedură secvențială care transformă un cartof crud într-un cartof rece. Iată ce este un algoritm: urmează o procedură pentru a obține rezultatul dorit. Este necesar să fie urmată succesiunea? Da, succesiunea este cel mai important lucru care trebuie urmat pentru a obține ceea ce ne dorim.
Tipuri de algoritmi:
- Algoritmi de sortare: Sortare cu bule, sortare prin inserare și multe altele. Acești algoritmi sunt utilizați pentru a sorta datele într-un anumit format.
- Algoritmi de cautare: Căutare liniară, căutare binară etc. Acești algoritmi sunt utilizați pentru a găsi o valoare sau o înregistrare pe care utilizatorul o cere.
- Algoritmi grafici : este folosit pentru a găsi soluții la probleme precum găsirea celei mai scurte căi între orașe și probleme din viața reală, cum ar fi problemele vânzătorilor ambulanți.
Algoritmi de sortare sunt algoritmi care preiau o colecție de elemente și le rearanjează într-o ordine specificată (de exemplu, crescător sau descrescător). Există mulți algoritmi de sortare diferiți, fiecare cu propriile sale puncte forte și puncte slabe. Unii dintre cei mai des utilizați algoritmi de sortare includ:
Sortare cu bule: Un algoritm de sortare simplu care parcurge în mod repetat lista, compară elementele adiacente și le schimbă dacă sunt în ordinea greșită.
Sortare prin inserare: Un algoritm de sortare simplu care construiește matricea sortată finală câte un articol, comparând fiecare articol nou cu elementele care au fost deja sortate și inserându-l în poziția corectă.
Sortare selecție: Un algoritm de sortare simplu care selectează în mod repetat elementul minim din partea nesortată a matricei și îl mută la sfârșitul părții sortate.
Sortare îmbinare: Un algoritm de sortare împărțiți și cuceriți care funcționează prin împărțirea listei nesortate în n sub-liste, sortând fiecare sub-listă și apoi îmbinându-le înapoi într-o singură listă sortată.
Sortare rapida: Un algoritm de sortare divide-and-conquer care funcționează prin selectarea unui element pivot din matrice și partiționarea celorlalte elemente în două sub-matrice, în funcție de faptul că acestea sunt mai mici sau mai mari decât pivotul. Sub-matricele sunt apoi sortate recursiv.
Fiecare dintre acești algoritmi are complexități diferite de timp și spațiu, făcându-i pe unii mai potriviti pentru anumite cazuri de utilizare decât pentru alții.
Algoritmii de căutare sunt algoritmi care caută un anumit element sau valoare într-o structură de date (cum ar fi o matrice sau o listă legată). Unii dintre cei mai des utilizați algoritmi de căutare includ:
Căutare liniară: Un algoritm de căutare simplu care iterează prin fiecare element al unei liste până când găsește o potrivire.
Căutare binară: Un algoritm de căutare care funcționează prin împărțirea în jumătate a unei liste sortate în mod repetat, până când este găsit elementul dorit sau se poate determina că elementul nu este prezent.
Salt de căutare: Un algoritm de căutare care funcționează prin trecerea înainte cu pași fiși în listă, până când este găsit un candidat potrivit, apoi efectuând o căutare liniară în elementele din jur.
Căutare prin interpolare : Un algoritm de căutare care funcționează prin utilizarea informațiilor despre intervalul de valori din listă pentru a estima poziția elementului dorit și apoi verificând dacă acesta este într-adevăr prezent.
Căutare în tabel hash: Un algoritm de căutare care utilizează o funcție hash pentru a mapa elementele la indici dintr-o matrice și apoi efectuează căutări în timp constant în matrice pentru a găsi elementul dorit.
Fiecare dintre acești algoritmi are complexități diferite de timp și spațiu, făcându-i pe unii mai potriviti pentru anumite cazuri de utilizare decât pentru alții. Alegerea algoritmului de utilizat depinde de cerințele specifice ale problemei, cum ar fi dimensiunea structurii datelor, distribuția valorilor și complexitatea de timp dorită.
Algoritmii grafici sunt un set de algoritmi care sunt utilizați pentru a procesa, analiza și înțelege structurile de date grafice. Graficele sunt structuri matematice folosite pentru a modela relațiile dintre obiecte, unde obiectele sunt reprezentate ca vârfuri (sau noduri), iar relațiile dintre ele sunt reprezentate ca muchii. Algoritmii grafici sunt utilizați într-o varietate de aplicații, cum ar fi analiza rețelelor, analiza rețelelor sociale, sistemele de recomandare și în multe alte domenii în care înțelegerea relațiilor dintre obiecte este importantă. Unii dintre algoritmii obișnuiți de grafică includ:
Algoritmi de cea mai scurtă cale (de exemplu, Dijkstra's, Bellman-Ford, A*)
Algoritmi Spanning Tree minim (de exemplu, Kruskal, Prim)
Algoritmi de flux maxim (de exemplu, Ford-Fulkerson, Edmonds-Karp)
Algoritmi de flux de rețea (de exemplu, potrivire bipartită)
Algoritmi de conectivitate (de ex. Căutare în primul rând în adâncime, Căutare în primul rând pe lățime)
De ce folosim algoritmi?
Luați în considerare doi copii, Aman și Rohan, care rezolvă Cubul Rubik. Aman știe cum să o rezolve într-un număr definit de pași. Pe de altă parte, Rohan știe că o va face, dar nu este la curent cu procedura. Aman rezolvă cubul în 2 minute, în timp ce Rohan este încă blocat și până la sfârșitul zilei, a reușit cumva să-l rezolve (s-ar putea să fi înșelat deoarece procedura este necesară).
Deci timpul necesar pentru a rezolva cu o procedură/algoritm este mult mai eficient decât cel fără nicio procedură. Prin urmare, necesitatea unui algoritm este o necesitate.
listează java în matrice
În ceea ce privește proiectarea unei soluții la o problemă IT, computerele sunt rapide, dar nu infinit. Memoria poate fi ieftină, dar nu gratuită. Deci, timpul de calcul este o resursă mărginită, la fel și spațiul din memorie. Așa că ar trebui să folosim aceste resurse cu înțelepciune, iar algoritmii care sunt eficienți în termeni de timp și spațiu vă vor ajuta să faceți acest lucru.
Crearea unui algoritm:
Deoarece algoritmul este independent de limbaj, scriem pașii pentru a demonstra logica din spatele soluției care trebuie utilizată pentru rezolvarea unei probleme. Dar înainte de a scrie un algoritm, țineți cont de următoarele puncte:
- Algoritmul trebuie să fie clar și lipsit de ambiguitate.
- Ar trebui să existe 0 sau mai multe intrări bine definite într-un algoritm.
- Un algoritm trebuie să producă una sau mai multe ieșiri bine definite care sunt echivalente cu ieșirea dorită. După un anumit număr de pași, algoritmii trebuie să se oprească.
- Algoritmi trebuie să se oprească sau să se termine după un număr finit de pași.
- Într-un algoritm, trebuie furnizate instrucțiuni pas cu pas și ar trebui să fie independente de orice cod de calculator.
Exemplu: algoritm pentru a multiplica 2 numere și a imprima rezultatul:
Pasul 1: start
Pasul 2: Obțineți cunoștințe despre input. Aici avem nevoie de 3 variabile; a și b vor fi intrarea utilizatorului și c va păstra rezultatul.
Pasul 3: Declarați variabilele a, b, c.
Pasul 4: Preluați intrare pentru variabilele a și b de la utilizator.
Pasul 5: Cunoașteți problema și găsiți soluția folosind operatori, structuri de date și logicaTrebuie să înmulțim variabilele a și b, așa că folosim operatorul * și atribuim rezultatul lui c.
Adică c <- a * bPasul 6: Verificați cum să dați rezultate, aici trebuie să imprimăm rezultatul. Deci scrie print c
Pasul 7: Sfârşit
Exemplul 1: Scrieți un algoritm pentru a găsi maximul tuturor elementelor prezente în tablou.
Urmați abordarea algoritmului după cum urmează:
Pasul 1: Porniți Programul
Pasul 2: Declarați o variabilă max cu valoarea primului element al matricei.
Pasul 3: Comparați max cu alte elemente folosind bucla.
Pasul 4: Dacă maxPasul 5: Dacă nu a mai rămas niciun element, întoarceți sau imprimați maxim, altfel treceți la pasul 3.
Pasul 6: Sfârșitul soluției
Exemplul 2: Scrieți un algoritm pentru a găsi media a 3 subiecți.
Urmați abordarea algoritmului după cum urmează:
Pasul 1: Porniți Programul
Pasul 2: Declarați și citiți subiectul 3, să spunem S1, S2, S3
Pasul 3: Calculați suma tuturor celor 3 valori Subiect și stocați rezultatul în variabila Sum (Suma = S1+S2+S3)
Pasul 4: Împărțiți Suma la 3 și atribuiți-o variabilei Medie. (Medie = Sumă/3)
Pasul 5: Tipăriți valoarea lui Media a 3 subiecte
Pasul 6: Sfârșitul soluției
Aflați despre complexitatea algoritmului:
Complexitatea algoritmilor se referă la cantitatea de resurse (cum ar fi timpul sau memoria) necesară pentru a rezolva o problemă sau a îndeplini o sarcină. Cea mai comună măsură a complexității este complexitatea timpului, care se referă la timpul necesar unui algoritm pentru a produce un rezultat în funcție de dimensiunea intrării. Complexitatea memoriei se referă la cantitatea de memorie utilizată de un algoritm. Proiectanții de algoritmi se străduiesc să dezvolte algoritmi cu cel mai mic timp posibil și complexități de memorie, deoarece acest lucru îi face mai eficienți și scalabili.
Complexitatea unui algoritm este o funcție care descrie eficiența algoritmului în ceea ce privește cantitatea de date pe care algoritmul trebuie să o proceseze.
De obicei, există unități naturale pentru domeniul și domeniul acestei funcții.
Un algoritm este analizat folosind complexitatea timpului și complexitatea spațială. Scrierea unui algoritm eficient ajută la consumul minim de timp pentru procesarea logicii. Pentru algoritmul A, acesta este judecat pe baza a doi parametri pentru o intrare de dimensiune n:
- Complexitatea timpului: Timpul necesar algoritmului pentru a rezolva problema. Se măsoară prin calcularea iterației buclelor, a numărului de comparații etc.
- Complexitatea timpului este o funcție care descrie cantitatea de timp pe care o ia un algoritm în termeni de cantitate de intrare la algoritm.
- Timpul poate însemna numărul de accesări la memorie efectuate, numărul de comparații între numere întregi, numărul de ori când se execută o buclă interioară sau o altă unitate naturală legată de timpul real pe care îl va lua algoritmul.
- Complexitatea spațiului: Spațiul ocupat de algoritm pentru a rezolva problema. Include spațiul folosit de variabilele de intrare necesare și orice spațiu suplimentar (excluzând spațiul ocupat de intrări) care este utilizat de algoritm. De exemplu, dacă folosim un tabel hash (un fel de structură de date), avem nevoie de o matrice pentru a stoca valorile astfel
- acesta este un spațiu suplimentar ocupat, deci va conta pentru complexitatea spațială a algoritmului. Acest spațiu suplimentar este cunoscut sub numele de spațiu auxiliar.
- Complexitatea spațiului este o funcție care descrie cantitatea de memorie (spațiu) pe care o ia un algoritm în termeni de cantitate de intrare la algoritm.
- Complexitatea spațiului este uneori ignorată deoarece spațiul utilizat este minim și/sau evident, dar uneori devine o problemă ca timp.
.Complexitatea în timp a operațiunilor:
- Alegerea structurii datelor ar trebui să se bazeze pe complexitatea timpului a operațiunilor care vor fi efectuate.
- Complexitatea timpului este definită în termeni de câte ori este nevoie pentru a rula un anumit algoritm, pe baza lungimii intrării.
- Complexitatea în timp a unui algoritm este timpul necesar pentru finalizarea fiecărei instrucțiuni. Este foarte dependent de dimensiunea datelor prelucrate.
- De exemplu, dacă trebuie să efectuați căutări frecvent, ar trebui să utilizați un arbore de căutare binar.
.Complexitatea spațială a operațiunilor:
butonul din centru css
- Alegerea structurii datelor trebuie să se bazeze pe complexitatea spațială a operațiunilor care vor fi efectuate.
- Cantitatea de memorie folosită de un program pentru a-l executa este reprezentată de complexitatea sa în spațiu.
- Deoarece un program necesită memorie pentru a stoca datele de intrare și valorile temporale în timpul rulării, complexitatea spațiului este spațiu auxiliar și spațiu de intrare.
- De exemplu, dacă trebuie să stocați o mulțime de date, ar trebui să utilizați o matrice.
cazuri în complexitate:
Există două cazuri de complexitate studiate în mod obișnuit în algoritmi:
1. Complexitatea celui mai bun caz: Cel mai bun scenariu pentru un algoritm este scenariul în care algoritmul efectuează cantitatea minimă de muncă (de exemplu, ia cel mai scurt timp, utilizează cea mai mică cantitate de memorie etc.).
2. Complexitatea în cel mai rău caz: Scenariul cel mai rău pentru un algoritm este scenariul în care algoritmul realizează cantitatea maximă de muncă (de exemplu, durează cea mai mare perioadă de timp, utilizează cea mai mare cantitate de memorie etc.).
În analiza complexității unui algoritm, este adesea mai informativ să studiezi scenariul cel mai rău caz, deoarece aceasta oferă o limită superioară garantată a performanței algoritmului. Analiza scenariului cel mai bun caz este uneori efectuată, dar este în general mai puțin importantă, deoarece oferă o limită inferioară care este adesea trivială de realizat.
Avantajele algoritmilor
- Ușor de înțeles: Deoarece este o reprezentare în trepte a unei soluții la o problemă dată, este ușor de înțeles.
- Independent de limbă: Nu depinde de niciun limbaj de programare, așa că poate fi înțeles cu ușurință de oricine.
- Depanare/Găsire erori: Fiecare pas este independent / într-un flux, astfel încât va fi ușor de identificat și remediat eroarea.
- Sub-probleme: Este scris într-un flux, așa că acum programatorul poate împărți sarcinile, ceea ce le face mai ușor de codificat.
Dezavantajele algoritmilor
- Crearea de algoritmi eficienți necesită timp și necesită abilități logice bune.
- Urât să arate ramificarea și bucla în algoritmi.