Datastrukturer och algoritmer (DSA) hänvisa till studiet av metoder för att organisera och lagra data och utformningen av procedurer (algoritmer) för att lösa problem, som verkar på dessa datastrukturer. DSA är en av de viktigaste färdigheterna som varje datavetenskapsstudent måste ha. Man ser ofta att personer med goda kunskaper om dessa tekniker är bättre programmerare än andra och därmed knäcker intervjuerna av nästan varje teknikjätte. Detta Handledning för DSA syftar till att hjälpa dig lära dig datastrukturer och algoritmer (DSA) snabbt och enkelt.
Innehållsförteckning
- DSA fullständigt formulär
- Vad är DSA?
- Hur lär man sig DSA?
- Sträng
- Länkade listor
- Matris/Grid
- Stack
- Kö
- Högen
- Hash
- Träd
- Graf
- Sökalgoritm
- Sorteringsalgoritm
- Dela och erövra algoritm
- giriga algoritmer
- Rekursion
- Backtracking-algoritm
- Dynamisk programmering
- Grafalgoritmer:
- Mönstersökning
- Matematiska algoritmer
- Geometriska algoritmer
- Bitvisa algoritmer
- Randomiserade algoritmer
- Gren och bunden algoritm
DSA fullständigt formulär
Termen DSA står för Datastrukturer och algoritmer , inom ramen för datavetenskap.
Vad är DSA?
Datastrukturer och algoritmer (DSA) hänvisa till studiet av metoder för att organisera och lagra data och utformningen av procedurer (algoritmer) för att lösa problem, som verkar på dessa datastrukturer.
Hur lär man sig DSA?
Det första och främsta är att dela upp den totala proceduren i små bitar som måste göras sekventiellt. Hela processen för att lära sig DSA från grunden kan delas upp i 5 delar:
- Lär dig minst ett programmeringsspråk (vi överlåter detta till ditt val.)
- Lär dig datastrukturer
- Lär dig algoritmer
- Lär dig mer om komplexiteten i tid och rum
- Övningsproblem på DSA

Hur lär man sig DSA?
Hoppas du har lärt dig ett valfritt programmeringsspråk, låt oss gå vidare med nästa steg för att lära oss DSA i denna DSA-handledning.
Här kommer det viktigaste och mest efterlängtade steget i färdplanen för att lära dig datastruktur och algoritm – det stadium där du börjar lära dig om DSA. Ämnet DSA består av två delar:
- Data struktur
- Algoritmer
Även om de är två olika saker, är de mycket relaterade till varandra, och det är mycket viktigt att följa rätt spår för att lära sig dem mest effektivt. Om du är förvirrad över vilken du ska lära dig först rekommenderar vi att du går igenom vår detaljerade analys om ämnet: Här har vi följt flödet av att lära sig en datastruktur och sedan de mest relaterade och viktiga algoritmerna som används av den datastrukturen.
Lär dig datastrukturer
Data struktur är viktiga komponenter som hjälper till att organisera och lagra data effektivt i datorns minne. De tillhandahåller ett sätt att hantera och manipulera data effektivt, vilket möjliggör snabbare åtkomst, infogning och radering. Vanliga datastrukturer inkluderar arrayer, länkade listor, stackar, köer, träd och grafer , var och en tjänar specifika syften baserat på kraven för det aktuella problemet. Att förstå datastrukturer är grundläggande för att designa effektiva algoritmer och optimera mjukvarans prestanda.
Array är en linjär datastruktur som lagrar en samling element av samma datatyp. Element tilldelas sammanhängande minne, vilket möjliggör konstant tidsåtkomst. Varje element har ett unikt indexnummer.
- Operationer på Array:
- Traversering : Itererar genom elementen i en array.
- Införande : Lägga till ett element i arrayen vid ett specifikt index.
- Radering : Ta bort ett element från arrayen vid ett specifikt index.
- Sökande : Hitta ett element i arrayen genom dess värde eller index.
- Typer av arrayer :
- Endimensionell array : En enkel array med en enda dimension.
- Flerdimensionell array : En matris med flera dimensioner, till exempel en matris.
- Tillämpningar av Array :
- Lagra data på ett sekventiellt sätt
- Implementering av köer, stackar och andra datastrukturer
- Representerar matriser och tabeller
- Relaterade ämnen om Array:
- Handledning för matriser
- De 50 bästa problemen med arraykodning för intervjuer
- Öva problem på Arrays
2. Sträng
A sträng är en teckensekvens som vanligtvis används för att representera text. Det anses vara en datatyp som möjliggör manipulering och bearbetning av textdata i datorprogram.
- Operationer på String :
- Sammankoppling : Sammanfoga två strängar.
- Jämförelse : Jämför två strängar lexikografiskt.
- Delsträng extraktion : Extrahera en delsträng från en sträng.
- Sök : Söker efter en delsträng i en sträng.
- Modifiering : Ändra eller ersätta tecken i en sträng.
- Tillämpningar av String :
- Textbehandling
- Mönstermatchning
- Datavalidering
- Databashantering
- Relaterade inlägg:
- Stränghandledning
- Topp 50 strängkodningsproblem för intervjuer
- Öva problem på sträng
3. Länkade listor
A länkad lista är en linjär datastruktur som lagrar data i noder, som är sammankopplade med pekare. Till skillnad från arrayer lagras inte länkade listor i angränsande minnesplatser.
- Egenskaper för länkad lista:
- Dynamisk : Länkade listor kan enkelt ändras i storlek genom att lägga till eller ta bort noder.
- Icke sammanhängande : Noder lagras på slumpmässiga minnesplatser och kopplas samman med pekare.
- Sekventiell åtkomst : Noder kan endast nås sekventiellt, från början av listan.
- Operationer på länkad lista:
- Skapande : Skapa en ny länkad lista eller lägga till en ny nod till en befintlig lista.
- Traversering : Itererar genom listan och kommer åt varje nod.
- Införande : Lägga till en ny nod på en specifik position i listan.
- Radering : Tar bort en nod från listan.
- Sök : Hitta en nod med ett specifikt värde i listan.
- Typer av länkad lista :
- Enkelt länkad lista : Varje nod pekar på nästa nod i listan.
- Dubbelt länkad lista : Varje nod pekar på både nästa och föregående nod i listan.
- Cirkulär länkad lista : Den sista noden pekar tillbaka till den första noden och bildar en cirkulär slinga.
- Tillämpningar av länkad lista :
- Länkade listor används i olika applikationer, inklusive:
- Implementering av köer och stackar
- Representerar grafer och träd
- Upprätthålla beställd data
- Minneshantering
- Relaterade ämnen:
- Handledning för länkad lista
- Topp 50 problem på länkad lista för intervjuer
- Öva problem på länkade listor
4. Matris/Grid
A matris är en tvådimensionell matris av element, ordnade i rader och kolumner. Det representeras som ett rektangulärt rutnät, med varje element i skärningspunkten mellan en rad och kolumn.
- Nyckelbegrepp:
- Rader : Horisontella linjer av element i en matris.
- Kolumner : Vertikala linjer av element i en matris.
- Mått : Antalet rader och kolumner i en matris (t.ex. en 3×4-matris har 3 rader och 4 kolumner).
- Element Tillgång : Element kan nås med hjälp av rad- och kolumnindex (t.ex. M[2][3] hänvisar till elementet i rad 2, kolumn 3).
- Tillämpningar av Matrix/Grid :
- Bildbehandling
- Dataanalys
- Optimeringsproblem
- Relaterade inlägg:
- Matris/Grid handledning
- Topp 50 problem på Matrix/Grid för intervjuer
- Öva problem på Matrix/Grid
5. Stack
Stack är en linjär datastruktur som följer en viss ordning i vilken operationerna utförs. Beställningen kan vara LIFO (sist in först ut) eller FILO (först in sist ut) . LIFO innebär att elementet som sätts in sist kommer ut först och RAD innebär att elementet som sätts in först kommer ut sist.
- Operation på stack :
- Skjuta på : Lägger till ett element till toppen av stacken
- Pop : Tar bort och returnerar elementet överst i stapeln
- Titt : Returnerar elementet överst i stapeln utan att ta bort det
- Storlek : Returnerar antalet element i stacken
- Är tom : Kontrollerar om stacken är tom
- Tillämpningar av Stack :
- Funktionsanrop
- Uttrycksvärdering
- Backtracking
- Ångra/gör om åtgärder
- Relaterade ämnen på Stack:
- Stack handledning
- Topp 50 problem på Stack för intervjuer
- Öva problem på Stack
6. Kö
A Kö Datastruktur är ett grundläggande begrepp inom datavetenskap som används för att lagra och hantera data i en specifik ordning. Det följer principen om Först in först ut ( FIFO ), där det första elementet som läggs till i kön är det första som tas bort
- Operation på kö :
- Kö : Lägger till ett element längst bak i kön
- Följaktligen : Tar bort ett element från framsidan av kön
- Titt : Hämtar frontelementet utan att ta bort det
- Är tom : Kontrollerar om kön är tom
- Är full : Kontrollerar om kön är full
- Typ av kö :
- Cirkulär kö : Sista elementet ansluter till det första elementet
- Dubbelkö (Deque) : Operationer kan utföras från båda ändarna
- Prioriterad kö : Elementen är ordnade utifrån prioritet
- Tillämpningar av kö :
- Jobbschemaläggning
- Meddelandekö
- Simuleringsmodellering
- Databuffring
- Relaterade ämnen:
- Handledning för kö
- De 50 bästa problemen i kö för intervjuer
- Öva problem på kö
7. Högen
A Högen är en komplett binär träddatastruktur som uppfyller heap-egenskapen: för varje nod är värdet på dess barn mindre än eller lika med dess eget värde. Högar används vanligtvis för att implementera prioriterade köer , där det minsta (eller största) elementet alltid är vid roten av trädet.
- Operations av Heap :
- Föra in : Lägger till ett nytt element till högen samtidigt som heapegenskaperna bibehålls.
- Extrahera-Max/Extrahera-Min : Tar bort rotelementet och strukturerar om högen.
- Öka/minska-nyckel : Uppdaterar värdet på en nod och omstrukturerar högen.
- Typer av hög :
- Max-Heap : Rotnoden har det maximala värdet bland sina underordnade.
- Min-Hög : Rotnoden har det lägsta värdet bland sina underordnade.
- Tillämpningar av Heap :
- Prioriterade köer
- Sortering
- Grafalgoritmer (t.ex. Dijkstras algoritm)
- Relaterade inlägg:
- Heap Tutorial
- Topp 50 problem på Heap för intervjuer
- Öva problem på Heap
8. Hash
Hashing är en teknik som genererar en utdata med fast storlek (hashvärde) från en indata av variabel storlek med hjälp av matematiska formler som kallas hashfunktioner . Hashing används för att bestämma ett index eller en plats för att lagra ett objekt i en datastruktur, vilket möjliggör effektiv hämtning och infogning.
- Nyckelbegrepp:
- Hash-funktion : En matematisk funktion som mappar en indata till ett hashvärde.
- Hash tabell : En datastruktur som lagrar nyckel-värdepar, där nyckeln är ett hashvärde och värdet är den faktiska datan.
- Kollision : När två olika nycklar producerar samma hashvärde.
- Typer av hashfunktioner :
- Indelningsmetod : Delar inmatningen med en konstant och använder resten som hashvärde.
- Mid Square Metod: Kvadraterar inmatningen och tar de mellersta siffrorna som hashvärde.
- Vikningsmetod : Delar in indata i lika stora block och lägger ihop dem för att få hashvärdet.
- Multiplikationsmetod : Multiplicerar inmatningen med en konstant och tar bråkdelen som hashvärde.
- Tekniker för kollisionsupplösning :
- Separat kedja (öppen hashing) : Lagrar kolliderande element i en länkad lista med motsvarande hashvärde.
- Öppna adressering (stängd hashing) : Använder olika strategier för att hitta en alternativ plats för kolliderande element i hashtabellen.
- Tillämpningar av hashing :
- Effektiv lagring och hämtning av data i databaser och filsystem.
- Verifiera lösenord och digitala signaturer.
- Distribuera förfrågningar över flera servrar.
- Genererar säkra hash för dataintegritet och autentisering.
- Relaterade inlägg:
- Hash handledning
- Öva problem på hashing
9. Träd
A träd är en icke-linjär hierarkisk datastruktur som består av noder sammankopplade med kanter, med en toppnod som kallas roten och noder som har barnnoder. Det används inom datavetenskap för att organisera data effektivt.
sträng till int konvertering i java
- Traversering av träd : Trädgenomgångsmetoder används för att besöka och bearbeta noder i en träddatastruktur. De tre vanliga traverseringsmetoderna är:
- Klassificeringar av träd:
- Klassificeringar av Träd syftar på att gruppera träd utifrån vissa egenskaper eller kriterier. Detta kan innebära att kategorisera träd baserat på deras balansfaktor, grad av noder, ordningsegenskaper etc. Nedan följer några viktiga klassificeringar av träd.
Klassificering | Beskrivning | Typ | Beskrivning |
---|---|---|---|
Efter grad | Träd kan klassificeras baserat på det maximala antalet barn varje nod kan ha. | Binärt träd | Varje nod har högst två barn. |
Ternärt träd | Varje nod har högst tre barn. | ||
N-ary träd | Varje nod har högst N barn. | ||
Genom att beställa | Träd kan klassificeras baserat på ordningen av noder och underträd | Binärt sökträd (BST) | Vänster barn |
Högen | Specialiserat binärt träd med högegenskapen. | ||
Efter balans | Träd kan klassificeras utifrån hur välbalanserade de är. | tunn algoritm | Underträdens höjder skiljer sig med högst en. Exempel inkluderar AVL-träd och röd-svarta träd. |
Obalanserat träd | Höjderna på underträd kan skilja sig markant, vilket påverkar prestandan i operationer som sökning och infogning. |
- Tillämpningar av träd:
- Filsystem
- Databaser
- XML-dokument
- Artificiell intelligens
- Relaterade inlägg:
- Handledning för träd
- Topp 50 trädkodningsproblem
- Träningsproblem på Tree
10. Graf
A Graf är en icke-linjär datastruktur som består av en ändlig uppsättning av hörn (eller noder) och en uppsättning kanter som förbinder ett par noder.
- Genomgång av graf:
- Breadth-First Search (BFS) : Besöker noder nivå för nivå.
- Depth-First Search (DFS) : Besöker noder rekursivt och utforskar en gren i taget.
- Tillämpningar av grafer :
- Sociala nätverk
- Kartor och navigering
- Schemaläggning
- Data mining
- Relaterade inlägg:
- Grafrepresentation
- Typer av grafer
- Graf handledning
- Öva problem på Graph
Lär dig algoritmer
När du har rensat begreppen för Data struktur , nu är det dags att börja din resa genom Algoritmer . Baserat på typen av natur och användning, grupperas algoritmerna i flera kategorier, som visas nedan:
1. Sökalgoritm
Sökande algoritmer används för att lokalisera specifik data inom en större uppsättning data. Det hjälper till att hitta förekomsten av ett målvärde i datan. Det finns olika typer av sökalgoritmer, var och en med sitt eget tillvägagångssätt och effektivitet.
- De vanligaste sökalgoritmerna:
- Linjär sökning : Iterativ sökning från ena änden till den andra.
- Binär sökning : Dela-och-härska sökning på en sorterad array, halvera sökutrymmet vid varje iteration.
- Ternär sökning : Dela-och-härska sökning på en sorterad array, dela upp sökutrymmet i tre delar vid varje iteration.
- Andra sökalgoritmer:
- Hoppa Sök
- Interpolationssökning
- Exponentiell sökning
- Relaterade ämnen:
- Öva problem med sökalgoritm
2. Sorteringsalgoritm
Sorteringsalgoritmer används för att ordna elementen i en lista i en specifik ordning, till exempel numerisk eller alfabetisk. Den organiserar objekten på ett systematiskt sätt, vilket gör det lättare att söka efter och komma åt specifika element.
Det finns många olika sorters algoritmer. Några allmänt använda algoritmer är:
Sorteringsalgoritm | Beskrivning |
---|---|
Bubblesort | Jämför intilliggande element iterativt och byter ut dem om de inte fungerar. Det största elementet bubblar till slutet av listan med varje pass. |
Urval Sortera | Hittar minimielementet i den osorterade delen av listan och byter ut det med det första elementet. Upprepar denna process tills hela listan är sorterad. |
Insättningssortering | Bygger den sorterade listan ett element i taget genom att infoga varje osorterat element på rätt plats i den sorterade delen. |
Snabb sortering | En dela-och-erövra-algoritm som väljer ett pivotelement, delar upp listan i två underlistor baserat på pivoten och rekursivt tillämpar samma process på underlistorna. |
Sammanfoga sortering | En annan dela-och-härska-algoritm som rekursivt delar upp listan i mindre underlistor, sorterar dem och sedan slår samman dem igen för att få den sorterade listan. |
Relaterade ämnen:
- Handledning för sorteringsalgoritm
- Toppsortering av intervjufrågor och -problem
- Öva problem med sorteringsalgoritm
3. Dela och erövra algoritm
Söndra och erövra Algoritmer följer en rekursiv strategi för att lösa problem genom att dela upp dem i mindre delproblem, lösa dessa delproblem och kombinera lösningarna för att erhålla den slutliga lösningen.
Steg:
- Dela upp : Dela upp problemet i mindre, oberoende delproblem.
- Erövra : Lös varje delproblem rekursivt.
- Kombinera : Slå samman lösningarna för delproblemen för att få den slutliga lösningen.
Exempel:
- Slå samman sortering: Delar upp arrayen i två halvor, sorterar varje halva rekursivt och slår samman de sorterade halvorna.
- Snabbsortering: Väljer ett pivotelement, delar upp arrayen i två subarrayer baserat på pivoten och sorterar rekursivt varje subarray.
- Binär sökning: Delar sökutrymmet på mitten upprepade gånger tills målelementet hittas eller sökutrymmet är slut.
Relaterade artiklar:
- Dela och erövra handledning
- Öva problem på Divide And Conquer-algoritmen
4. giriga algoritmer
Som namnet antyder bygger denna algoritm upp lösningen en bit i taget och väljer nästa bit som ger den mest uppenbara och omedelbara fördelen, dvs. vilket är det mest optimala valet i det ögonblicket. Så problemen där att välja lokalt optimalt också leder till att de globala lösningarna passar bäst för Greedy.
Några viktiga problem med giriga algoritmer är:
Algoritm | Beskrivning |
---|---|
Fractional ryggsäck | Hitta det maximala totala värdet av föremål som kan placeras i ryggsäcken, vilket tillåter fraktionerad inkludering av föremål. |
Dijkstras algoritm | Hittar den kortaste vägen från en källpunkt till alla andra hörn i en viktad graf. |
Kruskals algoritm | Hittar det minsta spännträdet i en viktad graf. |
Huffman-kodning | Skapar en optimal prefixkod för en uppsättning symboler, vilket minimerar den totala kodningslängden. |
Relaterade artiklar:
- Handledning för girig algoritm
- Öva problem på girig algoritm
5. Rekursion
Rekursion är en programmeringsteknik där en funktion anropar sig själv inom sin egen definition. Det används vanligtvis för att lösa problem som kan delas upp i mindre instanser av samma problem. Till exempel: Towers of Hanoi (TOH) , Faktoriell beräkning och Fibonacci-sekvens etc.
Steg :
- Basfallet : Definiera ett tillstånd som stoppar de rekursiva anropen och tillhandahåller en lösning.
- Rekursivt fall : Definiera stegen för att dela upp problemet i mindre instanser och göra rekursiva samtal.
- Lämna tillbaka : Returnera lösningen från de rekursiva anropen och kombinera dem för att lösa det ursprungliga problemet.
Poängen som gör rekursion till en av de mest använda algoritmerna är att den utgör basen för många andra algoritmer som t.ex. Trädövergångar , Grafövergångar , Dela och erövra algoritmer och Backtracking-algoritmer .
Relaterade ämnen:
- Rekursionshandledning
- Rekursiva funktioner
- Svansrekursion
- Topp 50 problem med rekursionsalgoritm för intervju
- Öva problem på rekursionsalgoritm
6. Backtracking-algoritm
Som tidigare nämnts Backtracking Algoritmen härleds från Rekursionsalgoritmen, med möjligheten att återgå om en rekursiv lösning misslyckas, d.v.s. om en lösning misslyckas, spårar programmet tillbaka till det ögonblick då det misslyckades och bygger på en annan lösning. Så i princip testar den alla möjliga lösningar och hittar den rätta.
Några viktiga och vanligaste problem med backtracking-algoritmer som du måste lösa innan du går vidare är:
Problem | Beskrivning |
---|---|
Riddarens turproblem | Att hitta en sekvens av drag av en riddare på ett schackbräde så att den besöker varje ruta exakt en gång. |
Råtta i en labyrint | Att hitta en väg från startpositionen till utgången i en labyrint, med hinder representerade som väggar. |
N-Queen-problem | Att placera N damer på ett N×N schackbräde så att inga två damer attackerar varandra. |
Delmängd Summa Problem | Bestämma om det finns en delmängd av den givna mängden med en given summa. |
Sudoku | Lösa ett 9×9-rutnätspussel med siffror från 1 till 9 så att varje rad, kolumn och 3×3-underrutnät innehåller alla siffror utan upprepning. |
Relaterad artikel:
- Handledning för bakåtspårning
- Öva problem på Backtracking-algoritmen
7. Dynamisk programmering
Dynamisk programmering är en metod som används inom matematik och datavetenskap för att lösa komplexa problem genom att bryta ner dem i enklare delproblem. Genom att lösa varje delproblem endast en gång och lagra resultaten undviker det redundanta beräkningar, vilket leder till effektivare lösningar för en lång rad problem.
Nyckelbegrepp:
- Optimal underbyggnad : Den optimala lösningen på ett problem kan konstrueras från de optimala lösningarna till dess delproblem.
- Överlappande delproblem : Delproblem upprepas ofta i det större problemet, vilket leder till redundanta beräkningar.
- Memoisering / Tabulering : Lagra lösningarna på delproblem för att undvika omräkning.
Några viktiga och vanligaste problem med dynamiska programmeringsalgoritmer, som du måste lösa innan du går vidare, är:
Problem | Beskrivning |
---|---|
Fibonacci-sekvens | Generera Fibonacci-tal med dynamisk programmering för att undvika redundanta beräkningar. |
Längsta vanliga efterföljd | Att hitta den längsta delsekvensen som är gemensam för två sekvenser. |
Längst ökande efterföljd | Att hitta den längsta undersekvensen av en given sekvens där elementen sorteras i ökande ordning. |
0/1 Knapsäcksproblem | Bestämma det maximala värdet som kan erhållas genom att välja objekt med givna vikter och värden, utan att överskrida en specificerad viktgräns. |
Stångskärningsproblem | Maximera vinsten genom att skära en stav av given längd i bitar och sälja dem enligt givna priser. |
Myntbyteproblem | Bestämma antalet sätt att göra förändringar för ett givet belopp med hjälp av en given uppsättning myntvalörer. |
Redigera avstånd | Att hitta det minsta antalet operationer (infogning, radering, ersättning) som krävs för att konvertera en sträng till en annan. |
Delmängd Summa Problem | Bestämma om det finns en delmängd av en given mängd med en given summa. |
Längsta palindromisk efterföljd | Att hitta den längsta undersekvensen av en given sekvens som är ett palindrom. |
Maximal Subarray Summa | Att hitta den sammanhängande delmatrisen med den största summan inom en given endimensionell matris. |
Partition lika delmängd Summa | Bestämma om det är möjligt att dela upp en given mängd i två delmängder med samma summa. |
Minsta kostnadsväg | Hitta vägen för lägsta kostnad från det övre vänstra hörnet till det nedre högra hörnet av ett givet rutnät. |
Maximal produktundergrupp | Att hitta den sammanhängande subarrayen med den största produkten inom en given endimensionell array. |
Relaterade artiklar:
- Tabulering vs Memoisering
- Hur löser man ett dynamiskt programmeringsproblem?
- Handledning för dynamisk programmering
- Topp 50 kodningsproblem för dynamisk programmering för intervjuer
- Öva problem på dynamisk programmeringsalgoritm
8. Grafalgoritmer :
Grafalgoritmer i datastrukturer och algoritmer (DSA) är en uppsättning tekniker och metoder som används för att lösa problem relaterade till grafer, som är en samling av noder och kanter. Dessa algoritmer är designade för att utföra olika operationer på grafer, som t.ex leta, korsa, hitta den kortaste vägen och bestämmer anslutning . De är viktiga för att lösa ett brett spektrum av verkliga problem, inklusive nätverksdirigering, sociala nätverksanalyser och resursallokering.
Ämne | Ämnets beskrivning | Algoritm | Algoritmens beskrivning |
---|---|---|---|
Genomgång av graf | Tekniker för att besöka alla hörn i en graf. | Depth-First Search (DFS) | Utforskar så långt som möjligt längs varje gren innan du backar. |
Breadth-First Search (BFS) | Utforskar närliggande hörn innan du går vidare till nästa nivå av hörn. | ||
Minsta spännande träd | Lägsta spännande träd är de minsta träden som förbinder alla noder i en graf utan att bilda cykler, som uppnås genom att lägga till så korta kanter som möjligt. | Den hittar ett minsta spännträd för en sammankopplad viktad graf. Den lägger till den minsta viktkanten som inte bildar en cykel. | |
Den hittar också ett minsta spännträd för en sammankopplad viktad graf. Den lägger till den minsta viktkanten som förbinder två träd. | |||
Topologisk sortering | Topologisk sortering är en linjär ordning av hörnen i en riktad acyklisk graf (DAG) så att för varje riktad kant från vertex u till vertex v kommer u före v i ordningen. | Kahns algoritm | Kahns algoritm hittar en topologisk ordning av en riktad acyklisk graf (DAG). |
DFS-baserad algoritm | DFS-baserad algoritm använder Depth-First Search för att utföra topologisk sortering i en riktad acyklisk graf (DAG). | ||
Kortaste vägen | En kortaste väg i en graf är vägen mellan två hörn i en graf som har den minsta summan av vikter längs sina kanter jämfört med alla andra banor mellan samma två hörn. | Girig algoritm för att hitta den kortaste vägen mellan alla noder i O(E * V logV) tid. | |
Hittar den kortaste vägen mellan alla nodpar i O(V^3) tid. | |||
Hittar den kortaste vägen från en enskild källa i O(V * E) tid. | |||
Johnson Algoritm | Hittar de kortaste vägarna mellan alla par av hörn i O(V^2 logV + V * E) tid. robotkomponenter | ||
Starkt anslutna komponenter | En starkt ansluten komponent (SCC) i en riktad graf är en maximal uppsättning av hörn så att det finns en väg från varje vertex i mängden till vartannat vertex i mängden. | Kosarajus algoritm är en tvåpasssalgoritm som effektivt hittar de starkt anslutna komponenterna (SCC) i en riktad graf. | |
Tarjans algoritm | Tarjans algoritm är en annan effektiv algoritm för att hitta SCC i en riktad graf |
Relaterade ämnen:
- Graf handledning
- Topp 50 grafkodningsproblem för intervjuer
- Öva problem på grafalgoritmer
9 . Mönstersökning
Mönstersökning är en grundläggande teknik i DSA som används för att hitta förekomster av ett specifikt mönster i en given text.
Nedan följer några vanliga mönstersökningsalgoritmer:
Algoritm | Beskrivning | Tidskomplexitet |
---|---|---|
Råstyrka | Den jämför mönstret med varje delsträng i texten | O(mn) |
Knuth-Morris-Pratt | Den använder en förberäknad felfunktion för att hoppa över onödiga jämförelser | O(m + n) |
Boyer-Moore | Den jämför mönstret från höger till vänster och hoppar över tecken baserat på den senaste missmatchningen | O(mn) |
Rabin-Karp | Den använder hash för att snabbt leta efter potentiella matchningar | O(m + n) |
Relaterade ämnen:
- Handledning för mönstersökning
- Öva Problem på Mönstersökning
10 . Matematiska algoritmer
Matematiska algoritmer är en klass av algoritmer som löser problem relaterade till matematiska begrepp. De används ofta inom olika områden, inklusive datorgrafik, numerisk analys, optimering och kryptografi.
Algoritm | Beskrivning |
---|---|
GCD och LCM | Hitta den största gemensamma divisorn och minsta gemensamma multipeln av två tal. |
Primtalsfaktorisering | Dela upp ett tal i dess primtalsfaktorer. |
Fibonacci-nummer | Generera Fibonacci-sekvensen, där varje tal är summan av de två föregående. |
Katalanska siffror | Räkna antalet giltiga uttryck med ett givet antal par parenteser. |
Modulär aritmetik | Utför aritmetiska operationer på tal modulo ett givet värde. |
Euler Totient Funktion | Räkna antalet positiva heltal mindre än ett givet tal som är relativt primtal för det. |
nCr-beräkningar | Beräkna binomialkoefficienten, som representerar antalet sätt att välja r element från en uppsättning av n element. |
Primtal och Primalitetstest | Bestäm om ett givet tal är primtal och hitta primtal effektivt. |
Sållalgoritmer | Hitta alla primtal upp till en given gräns. |
Relaterade ämnen:
- Öva problem på matematisk algoritm
11. Geometriska algoritmer
Geometriska algoritmer är en klass av algoritmer som löser problem relaterade till geometri. Geometriska algoritmer är avgörande för att lösa ett brett spektrum av problem inom datavetenskap, som:
Algoritm | Beskrivning |
---|---|
Konvext skrov | Hittar den minsta konvexa polygonen som innehåller en uppsättning punkter. |
Närmaste poängpar | Hittar de två punkter i en uppsättning som ligger närmast varandra. |
Linjekorsning | Bestämmer om två linjer skär varandra och hittar i så fall skärningspunkten. |
Peka i polygon | Bestämmer om en given punkt är inuti eller utanför en polygon. |
Relaterade ämnen:
- Öva problem på geometriska algoritmer
12. Bitvisa algoritmer
Bitvisa algoritmer är algoritmer som arbetar på enskilda bitar av siffror. Dessa algoritmer manipulerar den binära representationen av tal för att utföra uppgifter som bitmanipulation, bitvisa logiska operationer (AND, OR, XOR), skiftande bitar , och miljö eller rensa specifika bitar inom ett nummer. Bitvisa algoritmer används ofta i programmerings-, kryptografi- och optimeringsuppgifter på låg nivå där effektiv manipulering av enskilda bitar krävs.
Ämne | Beskrivning |
---|---|
Bit Shifting | Flyttar bitar åt vänster eller höger med ett specificerat antal positioner. |
Vänsterskift (<<) | Flyttar bitar åt vänster och multiplicerar effektivt talet med 2. |
Högerväxling (>>) | Flyttar bitar åt höger och dividerar effektivt talet med 2. |
Extrahera bitar | Använda masker för att extrahera specifika bitar från ett heltal. |
Inställning av bitar | Använda masker för att ställa in specifika bitar till 1 i ett heltal. |
Rensa bitar | Använda masker för att ställa in specifika bitar till 0 i ett heltal. |
Växlande bitar | Använd XOR (^) för att växla specifika bitar i ett heltal. |
Räkna Set-bitar | Räknar antalet set bitar (1s) i ett heltal. |
Relaterade ämnen:
- Handledning för bitvisa algoritmer
- Öva problem på bitvisa algoritmer
13. Randomiserade algoritmer
Randomiserade algoritmer är algoritmer som använder slumpmässighet för att lösa problem. De använder sig av slumpmässig input för att uppnå sina mål, vilket ofta leder till enklare eller effektivare lösningar.
Typer av randomiserade algoritmer:
- Las Vegas : Ger alltid ett korrekt resultat, men körtiden är slumpmässig.
- Monte Carlo : Kan ge ett felaktigt resultat med liten sannolikhet, men körtiden är vanligtvis snabbare.
Viktiga algoritmer som använder randomiseringsalgoritmer:
Algoritm | Beskrivning |
---|---|
QuickSort | En randomiserad sorteringsalgoritm med en genomsnittlig tidskomplexitet på O(n log n). |
Hoppa över lista | En randomiserad datastruktur som ger snabba sök- och infogningsoperationer. |
Blomfilter | En probabilistisk datastruktur för effektiv testning av medlemskap. |
14. Gren och bunden algoritm
De Gren och bunden algoritm är en metod som används i kombinatoriska optimeringsproblem för att systematiskt söka efter den bästa lösningen. Det fungerar genom att dela upp problemet i mindre delproblem, eller grenar, och sedan eliminera vissa grenar baserat på gränser för den optimala lösningen. Denna process fortsätter tills den bästa lösningen har hittats eller alla grenar har utforskats.
Standardproblem på gren- och bunden algoritm:
Unikt problem | Beskrivning |
---|---|
0/1 Knapsäck med Branch and Bound | Implementeringsdetaljer för grenen och bunden tillvägagångssätt för att lösa 0/1 Knapsack-problemet. |
0/1 Knapsäck med Least Cost Branch and Bound | Lösning av 0/1 Knapsack-problemet med den billigaste grenen och bunden teknik. |
8 pussel Problem med att använda Branch and Bound | Tillämpning av gren och bunden för att lösa 8-pusselproblemet, ett populärt glidande pusselspel. |
N Queen Problem med Branch and Bound | Använder branch and bound för att hitta lösningar på N Queens-problemet, ett klassiskt schackproblem. |
Relaterade ämnen:
- Handledning för gren och bunden algoritm
Lär dig mer om komplexiteter
Inom Data Structures and Algorithms (DSA) är huvudmålet att lösa problem effektivt och effektivt. För att bestämma effektiviteten hos ett program tittar vi på två typer av komplexitet:
- Tidskomplexitet : Detta talar om för oss hur lång tid det tar att köra vår kod.
- Rymdkomplexitet : Detta talar om för oss hur mycket minne vår kod använder.
Asymptotisk notation :
För att jämföra effektiviteten hos algoritmer använder vi asymptotisk notation, ett matematiskt verktyg som uppskattar tid baserat på ingångsstorlek utan att köra koden. Den fokuserar på antalet grundläggande operationer i programmet.
Notation | Beskrivning |
---|---|
Big-O (Ο) | Beskriver det värsta scenariot och ger en övre tidsgräns för algoritmen. |
Omega (Ω) | Beskriver det bästa scenariot och erbjuder en lägre tidsgräns för algoritmen. |
Theta (θ) | Representerar den genomsnittliga komplexiteten för en algoritmalgoritm. |
Den vanligaste notationen för kodanalys är Stor O-notation , vilket ger en övre gräns för körtid eller minnesanvändning avseende ingångsstorleken.
Relaterade ämnen:
- Förstå tidskomplexitet med enkla exempel
- Tidskomplexitet för olika datastrukturer
- Hur man analyserar loopar för komplexitetsanalys av algoritmer
- Öva frågor om tidskomplexitetsanalys
Öva problemfuskblad:
Sammanställda listor över problem från nedanstående artiklar:
- DSA Roadmap av Sandeep Jain
- SDE-BLAD – En komplett guide för SDE-förberedelser
- techcodeview.com Master Sheet – Lista över alla fuskblad