En algoritm är en väldefinierad sekventiell beräkningsteknik som accepterar ett värde eller en samling värden som indata och producerar utdata som behövs för att lösa ett problem.
Eller så kan vi säga att en algoritm sägs vara korrekt om och bara om den slutar med rätt utdata för varje ingångsinstans.
ALGORITIMERNAS BEHOV:
Algoritmer används för att lösa problem eller automatisera uppgifter på ett systematiskt och effektivt sätt. De är en uppsättning instruktioner eller regler som vägleder datorn eller programvaran i att utföra en viss uppgift eller lösa ett problem.
java sträng ansluta
Det finns flera anledningar till att vi använder algoritmer:
- Effektivitet: Algoritmer kan utföra uppgifter snabbt och exakt, vilket gör dem till ett viktigt verktyg för uppgifter som kräver mycket beräkningar eller databearbetning. Konsistens: Algoritmer är repeterbara och ger konsekventa resultat varje gång de exekveras. Detta är viktigt när man hanterar stora mängder data eller komplexa processer. Skalbarhet: Algoritmer kan skalas upp för att hantera stora datamängder eller komplexa problem, vilket gör dem användbara för applikationer som kräver bearbetning av stora datamängder. Automatisering: Algoritmer kan automatisera repetitiva uppgifter, vilket minskar behovet av mänskligt ingripande och frigör tid för andra uppgifter. Standardisering: Algoritmer kan standardiseras och delas mellan olika team eller organisationer, vilket gör det lättare för människor att samarbeta och dela kunskap.
Generellt sett är algoritmer ett viktigt verktyg för att lösa problem inom en mängd olika områden, inklusive datavetenskap, teknik, dataanalys, ekonomi och många andra.
Exempel:
Tänk på en låda där ingen kan se vad som händer inuti, vi säger en svart låda.
Vi ger input till rutan och den ger oss den utdata vi behöver, men proceduren som vi kan behöva känna till bakom omvandlingen av input till önskad output är en ALGORITM.
En algoritm är oberoende av vilket språk som används. Den berättar för programmeraren vilken logik som användes för att lösa problemet. Så det är en logisk steg-för-steg-procedur som fungerar som en ritning för programmerare.
Verkliga exempel som definierar användningen av algoritmer:
- Tänk på en klocka. Vi vet att klockan tickar men hur ställer tillverkaren in muttrarna och bultarna så att den fortsätter att röra sig var 60:e sekund, min visaren ska röra sig och var 60:e minut ska timvisaren röra sig? Så för att lösa detta problem måste det finnas en algoritm bakom.
- Har du sett någon laga din favoritmat åt dig? Är receptet nödvändigt för det? Ja, det är nödvändigt eftersom ett recept är ett sekventiellt förfarande som förvandlar en rå potatis till en kylig potatis. Detta är vad en algoritm är: att följa en procedur för att få önskad utdata. Är sekvensen nödvändig att följa? Ja, sekvensen är det viktigaste som måste följas för att få det vi vill ha.
Typer av algoritmer:
- Sorteringsalgoritmer: Bubblesortering, insättningssortering och många fler. Dessa algoritmer används för att sortera data i ett visst format.
- Sökalgoritmer: Linjär sökning, binär sökning, etc. Dessa algoritmer används för att hitta ett värde eller post som användaren efterfrågar.
- Grafalgoritmer : Det används för att hitta lösningar på problem som att hitta den kortaste vägen mellan städer och verkliga problem som problem med resande säljare.
Sorteringsalgoritmer är algoritmer som tar en samling element och ordnar om dem i en specificerad ordning (t.ex. stigande eller fallande). Det finns många olika sorteringsalgoritmer, var och en med sina egna styrkor och svagheter. Några av de vanligaste sorteringsalgoritmerna inkluderar:
Bubblesortering: En enkel sorteringsalgoritm som upprepade gånger går igenom listan, jämför intilliggande element och byter ut dem om de är i fel ordning.
Sortering av infogning: En enkel sorteringsalgoritm som bygger upp den slutliga sorterade matrisen ett objekt i taget, genom att jämföra varje nytt objekt med de objekt som redan har sorterats och infoga det på rätt plats.
Urvalssortering: En enkel sorteringsalgoritm som upprepade gånger väljer minimielementet från den osorterade delen av arrayen och flyttar den till slutet av den sorterade delen.
Slå samman sortering: En sorteringsalgoritm för dela och erövra som fungerar genom att dela upp den osorterade listan i n underlistor, sortera varje underlista och sedan slå samman dem till en enda sorterad lista.
Snabb sortering: En sorteringsalgoritm för dela och erövra som fungerar genom att välja ett pivotelement från arrayen och dela upp de andra elementen i två sub-arrayer, beroende på om de är mindre än eller större än pivoten. Undermatriserna sorteras sedan rekursivt.
Var och en av dessa algoritmer har olika tids- och rumskomplexiteter, vilket gör vissa mer lämpade för vissa användningsfall än andra.
.net handledning
Sökalgoritmer är algoritmer som söker efter ett visst element eller värde i en datastruktur (som en matris eller en länkad lista). Några av de mest använda sökalgoritmerna inkluderar:
Linjär sökning: En enkel sökalgoritm som itererar genom varje element i en lista tills den hittar en matchning.
Binär sökning: En sökalgoritm som fungerar genom att dela en sorterad lista på mitten upprepade gånger, tills det önskade elementet hittas eller det kan fastställas att elementet inte finns.
Hoppa sökning: En sökalgoritm som fungerar genom att hoppa framåt med fasta steg i listan, tills en lämplig kandidat hittas, och sedan utföra en linjär sökning i de omgivande elementen.
Interpolationssökning : En sökalgoritm som fungerar genom att använda information om värdeintervallet i listan för att uppskatta positionen för det önskade elementet och sedan verifiera att det verkligen finns.
Hash-tabellsökning: En sökalgoritm som använder en hashfunktion för att mappa element till index i en array och sedan utför konstanttidsuppslagningar i arrayen för att hitta det önskade elementet.
Var och en av dessa algoritmer har olika tids- och rumskomplexiteter, vilket gör vissa mer lämpade för vissa användningsfall än andra. Valet av vilken algoritm som ska användas beror på de specifika kraven för problemet, såsom storleken på datastrukturen, fördelningen av värden och den önskade tidskomplexiteten.
Grafalgoritmer är en uppsättning algoritmer som används för att bearbeta, analysera och förstå grafdatastrukturer. Grafer är matematiska strukturer som används för att modellera relationer mellan objekt, där objekten representeras som hörn (eller noder) och relationerna mellan dem representeras som kanter. Grafalgoritmer används i en mängd olika applikationer som nätverksanalys, sociala nätverksanalyser, rekommendationssystem och inom många andra områden där det är viktigt att förstå relationerna mellan objekt. Några av de vanliga grafalgoritmerna inkluderar:
Kortaste vägen algoritmer (t.ex. Dijkstra's, Bellman-Ford, A*)
Minimum Spanning Tree-algoritmer (t.ex. Kruskal, Prim)
Algoritmer för maximalt flöde (t.ex. Ford-Fulkerson, Edmonds-Karp)
Nätverksflödesalgoritmer (t.ex. tvådelad matchning)
Anslutningsalgoritmer (t.ex. Djup-först-sökning, Breadth-first-sökning)
Varför använder vi algoritmer?
Tänk på att två barn, Aman och Rohan, löser Rubiks kub. Aman vet hur man löser det i ett bestämt antal steg. Å andra sidan vet Rohan att han kommer att göra det men är inte medveten om proceduren. Aman löser kuben inom 2 minuter medan Rohan fortfarande är fast och i slutet av dagen lyckades han på något sätt lösa den (kan ha fuskat eftersom proceduren är nödvändig).
Så tiden som krävs för att lösa med en procedur/algoritm är mycket effektivare än den utan någon procedur. Därför är behovet av en algoritm ett måste.
När det gäller att utforma en lösning på ett IT-problem är datorer snabba men inte oändligt snabba. Minnet kan vara billigt men inte gratis. Så, beräkningstid är därför en begränsad resurs och så är utrymmet i minnet. Så vi bör använda dessa resurser klokt och algoritmer som är effektiva när det gäller tid och rum kommer att hjälpa dig att göra det.
Skapa en algoritm:
Eftersom algoritmen är språkoberoende skriver vi stegen för att visa logiken bakom lösningen som ska användas för att lösa ett problem. Men innan du skriver en algoritm, tänk på följande:
- Algoritmen ska vara tydlig och entydig.
- Det bör finnas 0 eller fler väldefinierade ingångar i en algoritm.
- En algoritm måste producera en eller flera väldefinierade utdata som är ekvivalenta med den önskade utmatningen. Efter ett visst antal steg måste algoritmerna stanna.
- Algoritmer måste stoppa eller sluta efter ett begränsat antal steg.
- I en algoritm bör steg-för-steg-instruktioner tillhandahållas, och de bör vara oberoende av eventuell datorkod.
Exempel: Algoritm för att multiplicera 2 tal och skriva ut resultatet:
Steg 1: Start
Steg 2: Få kunskap om input. Här behöver vi 3 variabler; a och b kommer att vara användarinmatningen och c kommer att hålla resultatet.
Steg 3: Deklarera a, b, c variabler.
Steg 4: Ta indata för a och b variabel från användaren.
Steg 5: Känn till problemet och hitta lösningen med hjälp av operatörer, datastrukturer och logikVi måste multiplicera a och b variabler så vi använder * operator och tilldelar resultatet till c.
Det är c <- a * bSteg 6: Kontrollera hur man ger utdata, här måste vi skriva ut utdata. Så skriv print c
Steg 7: Slutet
Exempel 1: Skriv en algoritm för att hitta maxvärdet av alla element som finns i arrayen.
Följ algoritmmetoden enligt nedan:
gnista handledning
Steg 1: Starta programmet
Steg 2: Deklarera en variabel max med värdet av det första elementet i arrayen.
Steg 3: Jämför max med andra element med loop.
Steg 4: Om maxSteg 5: Om inget element finns kvar, returnera eller skriv ut max annars gå till steg 3.
Steg 6: Slut på lösning
Exempel 2: Skriv en algoritm för att hitta medelvärdet av 3 ämnen.
Följ algoritmmetoden enligt nedan:
Steg 1: Starta programmet
Steg 2: Deklarera och läs 3 ämne, låt oss säga S1, S2, S3
Steg 3: Beräkna summan av alla de 3 ämnesvärdena och lagra resultatet i Sum-variabeln (Summa = S1+S2+S3)
Steg 4: Dividera Summa med 3 och tilldela den till Average variabel. (Genomsnitt = Summa/3)
Steg 5: Skriv ut värdet på Genomsnitt av 3 ämnen
Steg 6: Slut på lösning
Lär dig om algoritmkomplexitet:
Komplexitet i algoritmer hänvisar till mängden resurser (som tid eller minne) som krävs för att lösa ett problem eller utföra en uppgift. Det vanligaste måttet på komplexitet är tidskomplexitet, vilket hänvisar till hur lång tid det tar för en algoritm att producera ett resultat som en funktion av storleken på inmatningen. Minneskomplexitet hänvisar till mängden minne som används av en algoritm. Algoritmdesigners strävar efter att utveckla algoritmer med lägsta möjliga tids- och minneskomplexitet, eftersom detta gör dem mer effektiva och skalbara.
Komplexiteten hos en algoritm är en funktion som beskriver effektiviteten hos algoritmen i termer av mängden data som algoritmen måste bearbeta.
Vanligtvis finns det naturliga enheter för denna funktions domän och omfång.
En algoritm analyseras med Time Complexity och Space Complexity. Att skriva en effektiv algoritm hjälper till att förbruka minsta möjliga tid för att bearbeta logiken. För algoritm A bedöms den utifrån två parametrar för en ingång av storlek n:
- Tidskomplexitet: Tid det tar för algoritmen att lösa problemet. Det mäts genom att beräkna iterationen av loopar, antal jämförelser etc.
- Tidskomplexitet är en funktion som beskriver hur lång tid en algoritm tar i termer av mängden input till algoritmen.
- Tid kan betyda antalet utförda minnesåtkomster, antalet jämförelser mellan heltal, antalet gånger någon inre slinga exekveras eller någon annan naturlig enhet relaterad till hur lång tid algoritmen tar.
- Utrymmes komplexitet: Utrymme som tas av algoritmen för att lösa problemet. Det inkluderar utrymme som används av nödvändiga indatavariabler och eventuellt extra utrymme (exklusive utrymmet som tas av indata) som används av algoritmen. Till exempel, om vi använder en hashtabell (en slags datastruktur), behöver vi en array för att lagra värden så att
- detta är ett extra utrymme upptaget, och kommer därför att räknas till algoritmens utrymmeskomplexitet. Detta extra utrymme kallas Auxiliary Space.
- Utrymmeskomplexitet är en funktion som beskriver mängden minne(utrymme) en algoritm tar i termer av mängden input till algoritmen.
- Rymdens komplexitet ignoreras ibland eftersom utrymmet som används är minimalt och/eller uppenbart, men ibland blir det ett problem med tiden.
. Operationernas tidskomplexitet:
- Valet av datastruktur bör baseras på tidskomplexiteten för de operationer som kommer att utföras.
- Tidskomplexitet definieras i termer av hur många gånger det tar att köra en given algoritm, baserat på längden på inmatningen.
- Tidskomplexiteten för en algoritm är hur lång tid det tar för varje påstående att slutföra. Det är mycket beroende av storleken på den bearbetade datan.
- Till exempel, om du behöver utföra sökningar ofta, bör du använda ett binärt sökträd.
. Operationernas rymdkomplexitet:
- Valet av datastruktur bör baseras på utrymmeskomplexiteten hos de operationer som kommer att utföras.
- Mängden minne som används av ett program för att köra det representeras av dess utrymmeskomplexitet.
- Eftersom ett program kräver minne för att lagra indata och tidsvärden medan det körs, är utrymmeskomplexiteten extra utrymme och inmatningsutrymme.
- Om du till exempel behöver lagra mycket data bör du använda en array.
fall i komplexitet:
Det finns två vanliga fall av komplexitet i algoritmer:
1. Bästa fall komplexitet: Det bästa scenariot för en algoritm är det scenario där algoritmen utför den minsta mängden arbete (t.ex. tar den kortaste tiden, använder minsta mängden minne, etc.).
2. Komplexitet i värsta fall: Det värsta scenariot för en algoritm är det scenario där algoritmen utför den maximala mängden arbete (t.ex. tar längst tid, använder mest minne, etc.).
När man analyserar komplexiteten hos en algoritm är det ofta mer informativt att studera det värsta scenariot, eftersom detta ger en garanterad övre gräns för algoritmens prestanda. Best-case scenario-analys utförs ibland, men är generellt sett mindre viktig då den ger en nedre gräns som ofta är trivial att uppnå.
Fördelar med algoritmer
- Lätt att förstå: Eftersom det är en stegvis representation av en lösning på ett givet problem är det lätt att förstå.
- Språkoberoende: Det är inte beroende av något programmeringsspråk, så det kan lätt förstås av vem som helst.
- Felsökning/felsökning: Varje steg är oberoende / i ett flöde så det blir lätt att upptäcka och åtgärda felet.
- Underproblem: Det är skrivet i ett flöde så nu kan programmeraren dela upp uppgifterna vilket gör dem lättare att koda.
Nackdelar med algoritmer
- Att skapa effektiva algoritmer är tidskrävande och kräver goda logiska färdigheter.
- Otrevligt att visa förgrening och looping i algoritmer.