logo

Lær datastrukturer og algoritmer | DSA Tutorial

Datastrukturer og algoritmer (DSA) henvise til studiet af metoder til organisering og lagring af data og design af procedurer (algoritmer) til løsning af problemer, som opererer på disse datastrukturer. DSA er en af ​​de vigtigste færdigheder, som enhver datalogistuderende skal have. Det ses ofte, at folk med et godt kendskab til disse teknologier er bedre programmører end andre og dermed knækker interviews af næsten enhver teknologigigant. Det her DSA tutorial har til formål at hjælpe dig med at lære datastrukturer og algoritmer (DSA) hurtigt og nemt.



Indholdsfortegnelse

  • Lær algoritmer
  • Lær om kompleksiteter
  • Øv problemsnydeark
  • DSA fuld formular

    Begrebet DSA står for Datastrukturer og algoritmer , i forbindelse med datalogi.

    Hvad er DSA?

    Datastrukturer og algoritmer (DSA) henvise til studiet af metoder til organisering og lagring af data og design af procedurer (algoritmer) til løsning af problemer, som opererer på disse datastrukturer.



    Hvordan lærer man DSA?

    Den første og fremmeste ting er at opdele den samlede procedure i små stykker, som skal udføres sekventielt. Den komplette proces for at lære DSA fra bunden kan opdeles i 5 dele:

    1. Lær mindst ét ​​programmeringssprog (vi overlader dette til dit valg).
    2. Lær datastrukturer
    3. Lær algoritmer
    4. Lær om kompleksiteten i tid og rum
    5. Praksisproblemer på DSA
    Hvordan lærer man DSA?

    Hvordan lærer man DSA?

    I håb om at du har lært et programmeringssprog efter eget valg, så lad os gå videre med det næste trin for at lære DSA i denne DSA-tutorial.



    Her kommer den vigtigste og mest ventede fase af køreplanen for læring af datastruktur og algoritme – stadiet, hvor du begynder at lære om DSA. Emnet for DSA består af to dele:

    • Datastrukturer
    • Algoritmer

    Selvom de er to forskellige ting, er de meget forbundne, og det er meget vigtigt at følge det rigtige spor for at lære dem mest effektivt. Hvis du er i tvivl om, hvilken du skal lære først, anbefaler vi dig at gennemgå vores detaljerede analyse om emnet: Her har vi fulgt strømmen af ​​at lære en datastruktur og derefter de mest relaterede og vigtige algoritmer, der bruges af den datastruktur.

    Lær datastrukturer

    Datastrukturer er væsentlige komponenter, der hjælper med at organisere og gemme data effektivt i computerens hukommelse. De giver mulighed for at administrere og manipulere data effektivt, hvilket muliggør hurtigere adgang, indsættelse og sletning. Fælles datastrukturer omfatter arrays, sammenkædede lister, stakke, køer, træer og grafer , der hver tjener specifikke formål baseret på kravene til det aktuelle problem. Forståelse af datastrukturer er grundlæggende for at designe effektive algoritmer og optimere softwareydelsen.

    Array er en lineær datastruktur, der gemmer en samling af elementer af samme datatype. Elementer er tildelt sammenhængende hukommelse, hvilket giver mulighed for konstant-tidsadgang. Hvert element har et unikt indeksnummer.

    • Operationer på Array:
      • Traversering : Iteration gennem elementerne i et array.
      • Indskud : Tilføjelse af et element til arrayet ved et specifikt indeks.
      • Sletning : Fjernelse af et element fra arrayet ved et bestemt indeks.
      • Søger : Find et element i arrayet ved dets værdi eller indeks.
    • Typer af arrays :
      • En-dimensionel array : Et simpelt array med en enkelt dimension.
      • Multidimensionelt array : Et array med flere dimensioner, såsom en matrix.
    • Anvendelser af Array :
      • Lagring af data på en sekventiel måde
      • Implementering af køer, stakke og andre datastrukturer
      • Repræsenterer matricer og tabeller
    • Relaterede emner om Array:
      • Arrays Tutorial
      • Top 50 Array-kodningsproblemer til interviews
      • Øv problemer på Arrays

    2. Snor

    EN snor er en sekvens af tegn, der typisk bruges til at repræsentere tekst. Det betragtes som en datatype, der giver mulighed for manipulation og behandling af tekstdata i computerprogrammer.

    • Operationer på streng :
      • Sammenkædning : Sammenføjning af to strenge.
      • Sammenligning : Sammenligning af to strenge leksikografisk.
      • Understreng udvinding : Udpakning af en understreng fra en streng.
      • Søg : Søger efter en understreng i en streng.
      • Modifikation : Ændring eller erstatning af tegn i en streng.
    • Anvendelser af streng :
      • Tekstbehandling
      • Mønster matchende
      • Data validering
      • Databasestyring
    • Relaterede indlæg:
      • Strengevejledning
      • Top 50 strengkodningsproblemer til interviews
      • Øv problemer på streng

    3. Sammenkædede lister

    EN linket liste er en lineær datastruktur, der gemmer data i noder, som er forbundet med pointere. I modsætning til arrays gemmes sammenkædede lister ikke i sammenhængende hukommelsesplaceringer.

    • Karakteristika for linket liste:
      • Dynamisk : Sammenkædede lister kan nemt ændres ved at tilføje eller fjerne noder.
      • Ikke sammenhængende : Noder er gemt i tilfældige hukommelsesplaceringer og forbundet med pointere.
      • Sekventiel adgang : Noder kan kun tilgås sekventielt, startende fra toppen af ​​listen.
    • Operationer på linket liste:
      • Skabelse : Oprettelse af en ny linket liste eller tilføjelse af en ny node til en eksisterende liste.
      • Traversering : Iteration gennem listen og adgang til hver node.
      • Indskud : Tilføjelse af en ny node på en bestemt position på listen.
      • Sletning : Fjerner en node fra listen.
      • Søg : Find en node med en bestemt værdi på listen.
    • Typer af linkede lister :
      • Enkeltforbundet liste : Hver node peger på den næste node på listen.
      • Dobbeltforbundet liste : Hver node peger på både den næste og forrige node på listen.
      • Cirkulær linket liste : Den sidste knude peger tilbage til den første knude og danner en cirkulær løkke.
    • Anvendelser af linket liste :
      • Sammenkædede lister bruges i forskellige applikationer, herunder:
      • Implementering af køer og stakke
      • Repræsenterer grafer og træer
      • Vedligeholdelse af bestilte data
      • Hukommelseshåndtering
    • Relaterede emner:
      • Selvstudie med linket liste
      • Top 50 problemer på linket liste til interviews
      • Øv problemer på linkede lister

    4. Matrix/Grid

    EN matrix er et todimensionelt array af elementer, arrangeret i rækker og kolonner. Det er repræsenteret som et rektangulært gitter, med hvert element i skæringspunktet mellem en række og kolonne.

    • Nøglekoncepter:
      • Rækker : Vandrette linjer af elementer i en matrix.
      • Kolonner : Lodrette linjer af elementer i en matrix.
      • Dimensioner : Antallet af rækker og kolonner i en matrix (f.eks. en 3×4 matrix har 3 rækker og 4 kolonner).
      • Element Adgang : Elementer kan tilgås ved hjælp af række- og kolonneindekser (f.eks. henviser M[2][3] til elementet i række 2, kolonne 3).
    • Anvendelser af Matrix/Grid :
      • Billedbehandling
      • Dataanalyse
      • Optimeringsproblemer
    • Relaterede indlæg:
      • Matrix/Grid Tutorial
      • Top 50 problemer på Matrix/Grid til interviews
      • Øv opgaver på Matrix/Grid

    5. Stak

    Stak er en lineær datastruktur, der følger en bestemt rækkefølge, hvori operationerne udføres. Rækkefølgen kan evt LIFO (sidst ind først ud) eller FILO (først ind sidst ud) . LIFO betyder, at det element, der indsættes sidst, kommer først ud og RÆKKE betyder, at det element, der indsættes først, kommer sidst ud.

    • Betjening på stak :
      • Skubbe : Tilføjer et element til toppen af ​​stakken
      • Pop : Fjerner og returnerer elementet i toppen af ​​stakken
      • Kig : Returnerer elementet øverst i stakken uden at fjerne det
      • Størrelse : Returnerer antallet af elementer i stakken
      • Er tom : Kontrollerer, om stakken er tom
    • Anvendelser af Stack :
      • Funktionsopkald
      • Udtryksevaluering
      • Backtracking
      • Fortryd/gentag handlinger
    • Relaterede emner om stak:
      • Stak tutorial
      • Top 50 problemer på stak til interviews
      • Øv problemer på Stack

    6.

    EN Datastruktur er et grundlæggende begreb inden for datalogi, der bruges til at lagre og administrere data i en bestemt rækkefølge. Det følger princippet om Først ind først ud ( FIFO ), hvor det første element, der tilføjes til køen, er det første, der fjernes

    • Betjening på kø :
      • : Tilføjer et element bagerst i køen
      • Derfor : Fjerner et element fra forsiden af ​​køen
      • Kig : Henter frontelementet uden at fjerne det
      • Er tom : Kontrollerer om køen er tom
      • Er fuld : Tjekker om køen er fuld
    • Type kø :
      • Cirkulær kø : Sidste element forbinder til det første element
      • Dobbeltkø (Deque) : Operationer kan udføres fra begge ender
      • Prioritetskø : Elementer er arrangeret ud fra prioritet
    • Anvendelser af kø :
      • Jobplanlægning
      • Besked i kø
      • Simuleringsmodellering
      • Databuffring
    • Relaterede emner:
      • Tutorial i kø
      • Top 50 problemer i kø til interviews
      • Øve problemer på kø

    7. Dynge

    EN Dynge er en komplet binær trædatastruktur, der opfylder heap-egenskaben: for hver node er værdien af ​​dens børn mindre end eller lig med dens egen værdi. Dynger bruges normalt til at implementere prioriterede køer , hvor det mindste (eller største) element altid er ved roden af ​​træet.

    • Operationer af Heap :
      • Indsæt : Tilføjer et nyt element til heapen og bibeholder samtidig heap-egenskaber.
      • Udtræk-Max/Udtræk-Min : Fjerner rodelementet og omstrukturerer heapen.
      • Forøg/reducer-tast : Opdaterer værdien af ​​en node og omstrukturerer heapen.
    • Typer af bunke :
      • Max-Heap : Rodnoden har den maksimale værdi blandt sine børn.
      • Min-Heap : Rodknude har minimumværdien blandt sine børn.
    • Anvendelser af Heap :
      • Prioriterede køer
      • Sortering
      • Grafalgoritmer (f.eks. Dijkstras algoritme)
    • Relaterede indlæg:
      • Heap tutorial
      • Top 50 problemer på Heap til interviews
      • Øv problemer på Heap

    8. Hash

    Hashing er en teknik, der genererer et output med fast størrelse (hashværdi) fra et input af variabel størrelse ved hjælp af matematiske formler kaldet hash-funktioner . Hashing bruges til at bestemme et indeks eller en placering til lagring af et element i en datastruktur, hvilket muliggør effektiv hentning og indsættelse.

    • Nøglekoncepter:
      • Hash funktion : En matematisk funktion, der kortlægger et input til en hashværdi.
      • Hash tabel : En datastruktur, der gemmer nøgleværdi-par, hvor nøglen er en hashværdi, og værdien er de faktiske data.
      • Kollision : Når to forskellige nøgler producerer den samme hashværdi.
    • Typer af hashfunktioner :
      • Opdelingsmetode : Dividerer input med en konstant og bruger resten som hashværdi.
      • Mid Square Metode: Kvadrerer inputtet og tager de midterste cifre som hashværdi.
      • Foldemetode : Opdeler inputtet i lige store blokke og lægger dem sammen for at få hashværdien.
      • Multiplikationsmetode : Multiplicerer input med en konstant og tager brøkdelen som hashværdi.
    • Teknikker til løsning af kollisioner :
      • Separat kæde (åben hashing) : Gemmer kolliderende elementer i en sammenkædet liste med den tilsvarende hashværdi.
      • Åbn adressering (lukket hashing) : Bruger forskellige strategier til at finde en alternativ placering for kolliderende elementer i hash-tabellen.
    • Anvendelser af hashing :
      • Effektiv lagring og hentning af data i databaser og filsystemer.
      • Bekræftelse af adgangskoder og digitale signaturer.
      • Fordeling af anmodninger på tværs af flere servere.
      • Generering af sikre hashes til dataintegritet og godkendelse.
    • Relaterede indlæg:
      • Hash tutorial
      • Øv problemer på hashing

    9. Træ

    EN træ er en ikke-lineær hierarkisk datastruktur bestående af knudepunkter forbundet af kanter, med en topknude kaldet roden og knudepunkter med underknudepunkter. Det bruges i datalogi til at organisere data effektivt.

    rhel vs centos
    • Gennemgang af træ : Trægennemgangsmetoder bruges til at besøge og behandle noder i en trædatastruktur. De tre almindelige traverseringsmetoder er:
      • I rækkefølge : Besøg venstre undertræ, aktuel node og derefter højre undertræ.
      • Forudbestille : Besøg den aktuelle node, venstre undertræ og derefter højre undertræ.
      • Efterbestilling : Besøg venstre undertræ, højre undertræ og derefter nuværende knude.
    • Klassifikationer af træer:
      • Klassifikationer af Træer henvise til gruppering af træer baseret på bestemte egenskaber eller kriterier. Dette kan involvere kategorisering af træer baseret på deres balancefaktor, grad af noder, bestillingsegenskaber osv. Nedenfor er nogle vigtige klassifikationer af træ.
    Klassifikation Beskrivelse

    Type

    Beskrivelse

    Efter grad

    Træer kan klassificeres baseret på det maksimale antal børn, hver knude kan have.

    Binært træ

    Hver node har højst to børn.

    ternært træ

    Hver node har højst tre børn.

    N-ært træ

    Hver knude har højst N børn.

    Ved bestilling

    Træer kan klassificeres baseret på rækkefølgen af ​​noder og undertræer

    Binært søgetræ (BST)

    Venstre barn

    Dynge

    Specialiseret binært træ med heap-egenskaben.

    Ved balance

    Træer kan klassificeres ud fra, hvor velafbalancerede de er.

    Balanceret træ

    Højden på undertræer afviger højst med én. Eksempler inkluderer AVL-træer og rød-sorte træer.

    tostring i java

    Ubalanceret træ

    Højden af ​​undertræer kan variere betydeligt, hvilket påvirker ydeevnen i operationer som søgning og indsættelse.

    • Anvendelse af træer:
      • Filsystemer
      • Databaser
      • XML-dokumenter
      • Kunstig intelligens
    • Relaterede indlæg:
      • Træ tutorial
      • Top 50 trækodningsproblemer
      • Øv problemer på træ

    10. Graf

    EN Kurve er en ikke-lineær datastruktur bestående af et endeligt sæt af knudepunkter (eller noder) og et sæt kanter, der forbinder et par knudepunkter.

    Lær algoritmer

    Når du har ryddet begreberne af Datastrukturer , nu er det tid til at starte din rejse gennem Algoritmer . Baseret på typen af ​​natur og brug er algoritmerne grupperet i flere kategorier, som vist nedenfor:

    1. Søgealgoritme

    Søgealgoritmer bruges til at lokalisere specifikke data inden for et større datasæt. Det hjælper med at finde tilstedeværelsen af ​​en målværdi i dataene. Der findes forskellige typer søgealgoritmer, hver med sin egen tilgang og effektivitet.

    • Mest almindelige søgealgoritmer:
      • Lineær søgning : Iterativ søgning fra den ene ende til den anden.
      • Binær søgning : Del-og-hersk søgning på et sorteret array, halvering af søgerummet ved hver iteration.
      • Ternær søgning : Opdel-og-hersk søgning på et sorteret array, opdeler søgerummet i tre dele ved hver iteration.
    • Andre søgealgoritmer:
      • Hop Søg
      • Interpolationssøgning
      • Eksponentiel søgning
    • Relaterede emner:
      • Øv problemer med søgealgoritmen

    2. Sorteringsalgoritme

    Sorteringsalgoritmer bruges til at arrangere elementerne i en liste i en bestemt rækkefølge, såsom numerisk eller alfabetisk. Den organiserer emnerne på en systematisk måde, hvilket gør det nemmere at søge efter og få adgang til specifikke elementer.

    Der findes en masse forskellige typer sorteringsalgoritmer. Nogle udbredte algoritmer er:

    Sorteringsalgoritme Beskrivelse
    Boble sortering Sammenligner iterativt tilstødende elementer og bytter dem, hvis de er ude af drift. Det største element bobler til slutningen af ​​listen med hver gang.
    Udvalgssortering Finder minimumselementet i den usorterede del af listen og bytter det med det første element. Gentager denne proces, indtil hele listen er sorteret.
    Indsættelsessortering Opbygger den sorterede liste ét element ad gangen ved at indsætte hvert usorterede element i dens korrekte position i den sorterede del.
    Hurtig sortering En divider-and-conquer-algoritme, der vælger et pivotelement, opdeler listen i to underlister baseret på pivoten og rekursivt anvender den samme proces på underlisterne.
    Flet sortering En anden opdel-og-hersk-algoritme, der rekursivt opdeler listen i mindre underlister, sorterer dem og derefter flette dem sammen igen for at opnå den sorterede liste.

    Relaterede emner:

    • Tutorial til sorteringsalgoritme
    • Topsortering af interviewspørgsmål og -problemer
    • Øv problemer med sorteringsalgoritme

    3. Divide and Conquer-algoritme

    Del og hersk Algoritmer følger en rekursiv strategi for at løse problemer ved at opdele dem i mindre delproblemer, løse disse delproblemer og kombinere løsningerne for at opnå den endelige løsning.

    Trin:

    1. Dele : Opdel problemet i mindre, uafhængige underopgaver.
    2. Erobre : Løs hvert delproblem rekursivt.
    3. Forene : Flet løsningerne af underopgaverne sammen for at opnå den endelige løsning.

    Eksempler:

    • Flet sortering: Opdeler arrayet i to halvdele, sorterer hver halvdel rekursivt og fletter de sorterede halvdele.
    • Hurtig sortering: Vælger et pivotelement, opdeler arrayet i to subarrays baseret på pivoten og sorterer rekursivt hver subarray.
    • Binær søgning: Deler søgerummet i to gentagne gange, indtil målelementet er fundet, eller søgerummet er opbrugt.

    Relaterede artikler:

    • Del og hersk tutorial
    • Øv problemer på Divide And Conquer-algoritmen

    4. Grådige algoritmer

    Som navnet antyder, bygger denne algoritme løsningen op et stykke ad gangen og vælger det næste stykke, som giver den mest åbenlyse og umiddelbare fordel, dvs., hvilket er det mest optimale valg på det tidspunkt. Så de problemer, hvor det at vælge lokalt optimalt også fører til, at de globale løsninger passer bedst til Greedy.

    Nogle vigtige problemer med grådige algoritmer er:

    Algoritme Beskrivelse
    Fractional Rugsæk Find den maksimale samlede værdi af genstande, der kan placeres i rygsækken, hvilket tillader fraktioneret medtagelse af genstande.
    Dijkstras algoritme Finder den korteste vej fra et kildepunkt til alle andre hjørner i en vægtet graf.
    Kruskals algoritme Finder minimumspændingstræet i en vægtet graf.
    Huffman kodning Opretter en optimal præfikskode for et sæt symboler, hvilket minimerer den samlede kodningslængde.

    Relaterede artikler:

    • Tutorial for grådig algoritme
    • Øv problemer på Greedy algoritme

    5. Rekursion

    Rekursion er en programmeringsteknik, hvor en funktion kalder sig selv inden for sin egen definition. Det bruges normalt til at løse problemer, der kan opdeles i mindre forekomster af det samme problem. For eksempel: Towers of Hanoi (TOH) , Faktoriel beregning og Fibonacci sekvens etc.

    Trin :

    • Bundkasse : Definer en tilstand, der stopper de rekursive opkald og giver en løsning.
    • Rekursivt tilfælde : Definer trinene til at opdele problemet i mindre forekomster og foretage rekursive opkald.
    • Vend tilbage : Returner løsningen fra de rekursive opkald og kombiner dem for at løse det oprindelige problem.

    Pointen som gør Recursion til en af ​​de mest brugte algoritmer er, at den danner basis for mange andre algoritmer som f.eks. Trægennemløb , Grafgennemløb , Divide and Conquers-algoritmer og Backtracking algoritmer .

    Relaterede emner:

    6. Tilbagesporingsalgoritme

    Som tidligere nævnt er Backtracking algoritmen er afledt af rekursionsalgoritmen, med mulighed for at vende tilbage, hvis en rekursiv løsning fejler, dvs. hvis en løsning fejler, spores programmet tilbage til det øjeblik, hvor det fejlede og bygger på en anden løsning. Så grundlæggende prøver den alle mulige løsninger og finder den rigtige.

    Nogle vigtige og mest almindelige problemer med backtracking-algoritmer, som du skal løse, før du går videre, er:

    Problem Beskrivelse
    Knight's tour problem At finde en række træk af en ridder på et skakbræt, så den besøger hver felt nøjagtig én gang.
    Rotte i en labyrint At finde en vej fra startpositionen til udgangen i en labyrint, med forhindringer repræsenteret som vægge.
    N-Queen problem Placering af N dronninger på et N×N skakbræt, således at ikke to dronninger angriber hinanden.
    Subset Sum Problem Bestemmelse af, om der eksisterer en delmængde af det givne sæt med en given sum.
    Sudoku Løsning af et 9×9-gitterpuslespil med tal fra 1 til 9, således at hver række, kolonne og 3×3-undergitter indeholder alle cifrene uden gentagelse.

    Relateret artikel:

    • Backtracking tutorial
    • Øv problemer med Backtracking-algoritmen

    7. Dynamisk programmering

    Dynamisk programmering er en metode, der bruges i matematik og datalogi til at løse komplekse problemer ved at opdele dem i enklere delopgaver. Ved kun at løse hvert delproblem én gang og gemme resultaterne, undgår det overflødige beregninger, hvilket fører til mere effektive løsninger på en lang række problemer.

    Nøglekoncepter:

    • Optimal underbygning : Den optimale løsning på et problem kan konstrueres ud fra de optimale løsninger til dets delproblemer.
    • Overlappende underproblemer : Underproblemer gentages ofte i det større problem, hvilket fører til overflødige beregninger.
    • Memoisering / Tabulation : Lagring af løsninger på underproblemer for at undgå genberegning.

    Nogle vigtige og mest almindelige problemer med dynamiske programmeringsalgoritmer, som du skal løse, før du går videre, er:

    Problem Beskrivelse
    Fibonacci sekvens Generering af Fibonacci-tal ved hjælp af dynamisk programmering for at undgå overflødige beregninger.
    Længste fælles efterfølger At finde den længste delsekvens, der er fælles for to sekvenser.
    Længst stigende efterfølger Find den længste rækkefølge af en given sekvens, hvor elementerne er sorteret i stigende rækkefølge.
    0/1 Rullesæk Problem Bestemmelse af den maksimale værdi, der kan opnås ved at vælge varer med givne vægte og værdier, uden at overskride en specificeret vægtgrænse.
    Stangskæringsproblem Maksimering af fortjenesten ved at skære en stang af given længde i stykker og sælge dem efter givne priser.
    Møntskifteproblem Bestemmelse af antallet af måder at foretage ændringer for et givet beløb ved hjælp af et givet sæt møntværdier.
    Rediger afstand At finde det mindste antal operationer (indsættelse, sletning, substitution), der kræves for at konvertere en streng til en anden.
    Subset Sum Problem Bestemmelse af, om der eksisterer en delmængde af et givet sæt med en given sum.
    Længste palindromiske efterfølger At finde den længste undersekvens af en given sekvens, der er et palindrom.
    Maksimal Subarray Sum At finde det sammenhængende underarray med den største sum inden for en given endimensional matrix.
    Partition Lige Delmængde Sum Bestemmelse af, om det er muligt at opdele et givet sæt i to delmængder med samme sum.
    Minimumsomkostningssti Finde minimumsomkostningsstien fra øverste venstre hjørne til nederste højre hjørne af et givet gitter.
    Maksimal produktundergruppe At finde det sammenhængende underarray med det største produkt inden for et givet endimensionelt array.

    Relaterede artikler:

    • Tabulation vs Memoization
    • Hvordan løser man et dynamisk programmeringsproblem?
    • Tutorial i dynamisk programmering
    • Top 50 kodningsproblemer med dynamisk programmering til interviews
    • Øv problemer med dynamisk programmeringsalgoritme

    8. Grafiske algoritmer :

    Grafiske algoritmer i datastrukturer og algoritmer (DSA) er et sæt af teknikker og metoder, der bruges til at løse problemer relateret til grafer, som er en samling af noder og kanter. Disse algoritmer er designet til at udføre forskellige operationer på grafer, som f.eks søge, krydse, finde den korteste vej , og bestemme forbindelse . De er essentielle for at løse en bred vifte af problemer i den virkelige verden, herunder netværksrouting, sociale netværksanalyse og ressourceallokering.

    Emne

    Emnets beskrivelse

    Algoritme Algoritmebeskrivelse
    Grafgennemgang

    Teknikker til at besøge alle hjørner i en graf.

    Dybde-første søgning (DFS) Udforsker så langt som muligt langs hver gren, før den går tilbage.
    Breadth-First Search (BFS) Udforsker nabospidser, før de går til næste niveau af knudepunkter.

    Minimumsspændende træer

    Minimum Spanning Trees er de mindste træer, der forbinder alle noder i en graf uden at danne cyklusser, opnået ved at tilføje de kortest mulige kanter.

    Kruskals algoritme

    Den finder et minimumspændingstræ for en forbundet vægtet graf. Det tilføjer den mindste vægtkant, der ikke danner en cyklus.

    Prims algoritme

    Den finder også et minimumspændingstræ for en forbundet vægtet graf. Det tilføjer den mindste vægtkant, der forbinder to træer.

    Topologisk sortering

    Topologisk sortering er en lineær rækkefølge af hjørnerne i en rettet acyklisk graf (DAG), således at for hver rettet kant fra toppunkt u til toppunkt v, kommer u før v i rækkefølgen.

    Kahns algoritme Kahns algoritme finder en topologisk rækkefølge af en rettet acyklisk graf (DAG).
    DFS-baseret algoritme DFS-baseret algoritme bruger Depth-First Search til at udføre topologisk sortering i en rettet acyklisk graf (DAG).

    Korteste vej

    En korteste vej i en graf er stien mellem to toppunkter i en graf, der har den mindste sum af vægte langs dens kanter sammenlignet med alle andre veje mellem de samme to toppunkter.

    Dijkstras algoritme

    Grådig algoritme til at finde den korteste vej mellem alle noder i O(E * V logV) tid.

    Floyd-Warshall algoritme

    Finder den korteste vej mellem alle nodepar i O(V^3) tid.

    Bellman Ford algoritme

    Finder den korteste vej fra en enkelt kilde i O(V * E) tid.

    Johnsons algoritme

    Finder de korteste veje mellem alle par af toppunkter i O(V^2 logV + V * E) tid.

    Stærkt forbundne komponenter

    En stærkt forbundet komponent (SCC) af en rettet graf er et maksimalt sæt af hjørner, således at der er en vej fra hvert knudepunkt i sættet til hvert andet knudepunkt i sættet.

    Kosarajus algoritme

    Kosarajus algoritme er en to-pass algoritme, der effektivt finder de stærkt forbundne komponenter (SCC'er) i en rettet graf.

    Tarjans algoritme

    Tarjans algoritme er en anden effektiv algoritme til at finde SCC'er i en rettet graf

    Relaterede emner:

    • Graf tutorial
    • Top 50 grafkodningsproblemer til interviews
    • Øv problem med grafalgoritmer

    9 . Mønstersøgning

    Mønstersøgning er en grundlæggende teknik i DSA, der bruges til at finde forekomster af et specifikt mønster i en given tekst.

    Nedenfor er nogle standard mønstersøgningsalgoritmer:

    Algoritme Beskrivelse Tidskompleksitet
    Råstyrke Den sammenligner mønsteret med hver delstreng i teksten O(mn)
    Knuth-Morris-Pratt Den bruger en forudberegnet fejlfunktion til at springe unødvendige sammenligninger over O(m + n)
    Boyer-Moore Den sammenligner mønsteret fra højre til venstre og springer tegn over baseret på den sidste uoverensstemmelse O(mn)
    Rabin-Karp Den bruger hashing til hurtigt at tjekke for potentielle matches O(m + n)

    Relaterede emner:

    • Tutorial til mønstersøgning
    • Øv Opgave på Mønstersøgning

    10 . Matematiske algoritmer

    Matematiske algoritmer er en klasse af algoritmer, der løser problemer relateret til matematiske begreber. De er meget udbredt inden for forskellige områder, herunder computergrafik, numerisk analyse, optimering og kryptografi.

    Algoritme Beskrivelse
    GCD og LCM Find den største fælles divisor og mindste fælles multiplum af to tal.
    Primær faktorisering Dekomponer et tal i dets primfaktorer.
    Fibonacci numre Generer Fibonacci-sekvensen, hvor hvert tal er summen af ​​de to foregående.
    catalanske tal Tæl antallet af gyldige udtryk med et givet antal par parenteser.
    Modulær aritmetik Udfør aritmetiske operationer på tal modulo en given værdi.
    Euler Totient funktion Tæl antallet af positive heltal mindre end et givet tal, der er relativt primtal for det.
    nCr-beregninger Beregn den binomiale koefficient, som repræsenterer antallet af måder at vælge r elementer på fra et sæt af n elementer.
    Primtal og Primalitetstest Bestem, om et givet tal er primtal, og find primtal effektivt.
    Sigte algoritmer Find alle primtal op til en given grænse.

    Relaterede emner:

    • Øve opgave om matematisk algoritme

    11. Geometriske algoritmer

    Geometriske algoritmer er en klasse af algoritmer, der løser problemer relateret til geometri. Geometriske algoritmer er afgørende for at løse en lang række problemer inden for datalogi, såsom:

    Algoritme Beskrivelse
    Konveks skrog Finder den mindste konvekse polygon, der indeholder et sæt punkter.
    Nærmeste par af punkter Finder de to punkter i et sæt, der er tættest på hinanden.
    Linjekryds Bestemmer, om to linjer skærer hinanden, og i givet fald finder skæringspunktet.
    Peg i polygon Bestemmer, om et givet punkt er inden for eller uden for en polygon.

    Relaterede emner:

    • Øve opgave om geometriske algoritmer

    12. Bitvise Algoritmer

    Bitvise algoritmer er algoritmer, der opererer på individuelle bits af tal. Disse algoritmer manipulerer den binære repræsentation af tal til at udføre opgaver såsom bitmanipulation, bitvise logiske operationer (AND, OR, XOR), skiftende bits , og indstilling eller rydde specifikke bits inden for et tal. Bitvise algoritmer bruges ofte i programmering, kryptografi og optimeringsopgaver på lavt niveau hvor der kræves effektiv manipulation af individuelle bits.

    Emne Beskrivelse
    Bit Shifting Skifter bits til venstre eller højre med et angivet antal positioner.
    Venstre skift (<<) Skifter bits til venstre og multiplicerer effektivt tallet med 2.
    Højre skift (>>) Skifter bits til højre og dividerer effektivt tallet med 2.
    Udtræk bits Brug af masker til at udtrække specifikke bits fra et heltal.
    Indstilling af bits Brug af masker til at sætte specifikke bits til 1 i et heltal.
    Rydning af bits Brug af masker til at sætte specifikke bit til 0 i et heltal.
    Skiftende bits Brug af XOR (^) til at skifte mellem bestemte bits i et heltal.
    Tælle sæt bits Tæller antallet af sæt bits (1s) i et heltal.

    Relaterede emner:

    • Tutorial om bitvise algoritmer
    • Øve problem på bitvise algoritmer

    13. Randomiserede algoritmer

    Randomiserede algoritmer er algoritmer, der bruger tilfældighed til at løse problemer. De gør brug af tilfældige input til at nå deres mål, hvilket ofte fører til enklere eller mere effektive løsninger.

    Typer af randomiserede algoritmer:

    • Las Vegas : Giver altid et korrekt resultat, men køretiden er tilfældig.
    • Monte Carlo : Kan give et forkert resultat med en lille sandsynlighed, men køretiden er normalt hurtigere.

    Vigtige algoritmer, der bruger randomiseringsalgoritmer:

    Algoritme Beskrivelse
    QuickSort En randomiseret sorteringsalgoritme med en gennemsnitlig sagstidskompleksitet på O(n log n).
    Spring over liste En randomiseret datastruktur, der giver hurtige søge- og indsættelsesoperationer.
    Bloom Filter En probabilistisk datastruktur til effektiv test af sæt medlemskab.

    14. Gren og bundet algoritme

    Det Gren og bundet algoritme er en metode, der bruges i kombinatoriske optimeringsproblemer til systematisk at søge efter den bedste løsning. Det virker ved at opdele problemet i mindre delproblemer eller grene og derefter fjerne visse grene baseret på grænser for den optimale løsning. Denne proces fortsætter, indtil den bedste løsning er fundet, eller alle grene er blevet udforsket.

    Standardproblemer på branche- og bundet algoritme:

    Unikt problem Beskrivelse
    0/1 Rullesæk med Branch and Bound Implementeringsdetaljer for branch og bundet tilgang til løsning af 0/1 Knapsack-problemet.
    0/1 Rullesæk ved hjælp af Least Cost Branch and Bound Løsning af 0/1 Knapsack-problemet ved at bruge den billigste gren og bundet teknik.
    8 puslespil Problem med at bruge Branch and Bound Anvendelse af gren og bundet til at løse 8 puslespilsproblemet, et populært glidende puslespil.
    N Queen Problem ved hjælp af Branch and Bound Ved at bruge branch and bound til at finde løsninger på N Queens-problemet, et klassisk skakproblem.

    Relaterede emner:

    • Tutorial for gren og bundet algoritme

    Lær om kompleksiteter

    I Data Structures and Algorithms (DSA) er hovedmålet at løse problemer effektivt og effektivt. For at bestemme effektiviteten af ​​et program ser vi på to typer kompleksiteter:

    1. Tidskompleksitet : Dette fortæller os, hvor lang tid det tager at køre vores kode.
    2. Rumkompleksitet : Dette fortæller os, hvor meget hukommelse vores kode bruger.

    Asymptotisk notation :

    For at sammenligne effektiviteten af ​​algoritmer bruger vi asymptotisk notation, et matematisk værktøj, der estimerer tid baseret på input størrelse uden at køre koden. Den fokuserer på antallet af grundlæggende operationer i programmet.

    Notation Beskrivelse
    Big-O (Ο) Beskriver det værst tænkelige scenarie og giver en øvre tidsgrænse for algoritmen.
    Omega (Ω) Beskriver det bedste scenario, der tilbyder en lavere tidsgrænse for algoritmen.
    Theta (θ) Repræsenterer den gennemsnitlige kompleksitet af en algoritmealgoritme.

    Den mest almindeligt anvendte notation til kodeanalyse er Stor O-notation , der giver en øvre grænse for køretiden eller hukommelsesforbruget vedrørende inputstørrelsen.

    shloka mehta uddannelse

    Relaterede emner:

    Praksis Problem Cheat Sheets:

    Udvalgte lister over problemer fra nedenstående artikler:

    • DSA Roadmap af Sandeep Jain
    • SDE SHEET – En komplet vejledning til SDE-forberedelse
    • techcodeview.com Master Sheet – Liste over alle Cheat Sheets