Een algoritme is een goed gedefinieerde sequentiële rekentechniek die een waarde of een verzameling waarden als invoer accepteert en de uitvoer(en) produceert die nodig is om een probleem op te lossen.
Of we kunnen zeggen dat een algoritme accuraat is als en slechts als het stopt met de juiste uitvoer voor elke invoerinstantie.
BEHOEFTE VAN DE ALGORITMEN:
Algoritmen worden gebruikt om problemen op te lossen of taken op een systematische en efficiënte manier te automatiseren. Het zijn een reeks instructies of regels die de computer of software begeleiden bij het uitvoeren van een bepaalde taak of het oplossen van een probleem.
cabine-algoritme
Er zijn verschillende redenen waarom we algoritmen gebruiken:
- Efficiëntie: Algoritmen kunnen taken snel en nauwkeurig uitvoeren, waardoor ze een essentieel hulpmiddel zijn voor taken die veel berekeningen of gegevensverwerking vereisen. Consistentie: Algoritmen zijn herhaalbaar en leveren consistente resultaten op telkens wanneer ze worden uitgevoerd. Dit is belangrijk bij het omgaan met grote hoeveelheden gegevens of complexe processen. Schaalbaarheid: Algoritmen kunnen worden opgeschaald om grote datasets of complexe problemen aan te kunnen, waardoor ze nuttig zijn voor toepassingen waarbij grote hoeveelheden gegevens moeten worden verwerkt. Automatisering: Algoritmen kunnen repetitieve taken automatiseren, waardoor de noodzaak voor menselijke tussenkomst wordt verminderd en tijd wordt vrijgemaakt voor andere taken. Standaardisatie: Algoritmen kunnen worden gestandaardiseerd en gedeeld tussen verschillende teams of organisaties, waardoor het voor mensen gemakkelijker wordt om samen te werken en kennis te delen.
Over het algemeen zijn algoritmen een essentieel hulpmiddel voor het oplossen van problemen op verschillende gebieden, waaronder informatica, techniek, data-analyse, financiën en vele andere.
Voorbeeld:
Beschouw een doos waarin niemand kan zien wat er binnenin gebeurt, we zeggen een zwarte doos.
We geven input aan de box en deze geeft ons de output die we nodig hebben, maar de procedure die we mogelijk moeten kennen achter de conversie van input naar gewenste output is een ALGORITME.
Een algoritme is onafhankelijk van de gebruikte taal. Het vertelt de programmeur welke logica wordt gebruikt om het probleem op te lossen. Het is dus een logische stapsgewijze procedure die als blauwdruk voor programmeurs fungeert.
Voorbeelden uit de praktijk die het gebruik van algoritmen definiëren:
- Denk eens aan een klok. We weten dat de klok tikt, maar hoe stelt de fabrikant die bouten en moeren zo in dat de klok elke 60 seconden blijft bewegen, de min-wijzer moet bewegen en elke 60 minuten de uurwijzer? Om dit probleem op te lossen, moet er dus een algoritme achter zitten.
- Heb je iemand je favoriete eten voor je zien koken? Is het recept daarvoor nodig? Ja, dat is nodig, want een recept is een opeenvolgende procedure die van een rauwe aardappel een koude aardappel maakt. Dit is wat een algoritme is: een procedure volgen om de gewenste uitvoer te krijgen. Moet de volgorde gevolgd worden? Ja, de volgorde is het belangrijkste dat moet worden gevolgd om te krijgen wat we willen.
Soorten algoritmen:
- Sorteeralgoritmen: Bellensortering, invoegsortering en nog veel meer. Deze algoritmen worden gebruikt om de gegevens in een bepaald formaat te sorteren.
- Zoekalgoritmen: Lineair zoeken, binair zoeken, enz. Deze algoritmen worden gebruikt bij het vinden van een waarde of record waar de gebruiker om vraagt.
- Grafiekalgoritmen : Het wordt gebruikt om oplossingen te vinden voor problemen zoals het vinden van de kortste weg tussen steden, en problemen uit het echte leven, zoals problemen met handelsreizigers.
Sorteeralgoritmen zijn algoritmen die een verzameling elementen nemen en deze in een bepaalde volgorde herschikken (bijvoorbeeld oplopend of aflopend). Er zijn veel verschillende sorteeralgoritmen, elk met zijn eigen sterke en zwakke punten. Enkele van de meest gebruikte sorteeralgoritmen zijn:
Bellensoort: Een eenvoudig sorteeralgoritme dat herhaaldelijk door de lijst loopt, aangrenzende elementen vergelijkt en deze verwisselt als ze in de verkeerde volgorde staan.
Invoegsoort: Een eenvoudig sorteeralgoritme dat de uiteindelijk gesorteerde array item voor item opbouwt, door elk nieuw item te vergelijken met de items die al zijn gesorteerd en het op de juiste positie in te voegen.
Selectie sorteren: Een eenvoudig sorteeralgoritme dat herhaaldelijk het minimumelement uit het ongesorteerde deel van de array selecteert en dit naar het einde van het gesorteerde deel verplaatst.
Sortering samenvoegen: Een verdeel-en-heers-sorteeralgoritme dat werkt door de ongesorteerde lijst in n sublijsten te verdelen, elke sublijst te sorteren en ze vervolgens weer samen te voegen tot één enkele gesorteerde lijst.
Snel sorteren: Een verdeel-en-heers-sorteeralgoritme dat werkt door een draaielement uit de array te selecteren en de andere elementen in twee subarrays te verdelen, afhankelijk van of ze kleiner of groter zijn dan het draaipunt. De subarrays worden vervolgens recursief gesorteerd.
Elk van deze algoritmen heeft verschillende tijd- en ruimtecomplexiteiten, waardoor sommige geschikter zijn voor bepaalde gebruiksscenario's dan andere.
Zoekalgoritmen zijn algoritmen die zoeken naar een bepaald element of een bepaalde waarde in een datastructuur (zoals een array of een gekoppelde lijst). Enkele van de meest gebruikte zoekalgoritmen zijn:
Lineair zoeken: Een eenvoudig zoekalgoritme dat elk element van een lijst doorloopt totdat het een match vindt.
Binaire zoekopdracht: Een zoekalgoritme dat werkt door een gesorteerde lijst herhaaldelijk in tweeën te delen, totdat het gewenste element is gevonden of kan worden vastgesteld dat het element niet aanwezig is.
Snel zoeken: Een zoekalgoritme dat werkt door met vaste stappen vooruit te springen in de lijst, totdat een geschikte kandidaat is gevonden, en vervolgens lineair te zoeken in de omringende elementen.
Interpolatie zoeken : een zoekalgoritme dat werkt door informatie over het waardenbereik in de lijst te gebruiken om de positie van het gewenste element te schatten en vervolgens te verifiëren dat het inderdaad aanwezig is.
Zoeken in hashtabellen: Een zoekalgoritme dat een hashfunctie gebruikt om elementen toe te wijzen aan indices in een array, en vervolgens constante tijdzoekopdrachten in de array uitvoert om het gewenste element te vinden.
Elk van deze algoritmen heeft verschillende tijd- en ruimtecomplexiteiten, waardoor sommige geschikter zijn voor bepaalde gebruiksscenario's dan andere. De keuze welk algoritme moet worden gebruikt, hangt af van de specifieke vereisten van het probleem, zoals de omvang van de datastructuur, de verdeling van waarden en de gewenste tijdscomplexiteit.
Grafiekalgoritmen zijn een reeks algoritmen die worden gebruikt om grafiekgegevensstructuren te verwerken, analyseren en begrijpen. Grafieken zijn wiskundige structuren die worden gebruikt om relaties tussen objecten te modelleren, waarbij de objecten worden weergegeven als hoekpunten (of knooppunten) en de relaties daartussen worden weergegeven als randen. Grafiekalgoritmen worden gebruikt in een verscheidenheid aan toepassingen, zoals netwerkanalyse, sociale netwerkanalyse, aanbevelingssystemen en op veel andere gebieden waar het begrijpen van de relaties tussen objecten belangrijk is. Enkele veel voorkomende grafiekalgoritmen zijn:
Kortste pad-algoritmen (e.g. Dijkstra’s, Bellman-Ford, A*)
Minimale Spanning Tree-algoritmen (bijv. Kruskal, Prim)
Maximale Flow-algoritmen (bijv. Ford-Fulkerson, Edmonds-Karp)
Netwerkstroomalgoritmen (bijv. bipartiete matching)
Connectiviteitsalgoritmen (bijvoorbeeld diepte-eerst zoeken, breedte-eerst zoeken)
Waarom gebruiken we algoritmen?
Denk eens aan twee kinderen, Aman en Rohan, die de Rubiks kubus oplossen. Aman weet het in een bepaald aantal stappen op te lossen. Aan de andere kant weet Rohan dat hij het zal doen, maar is hij niet op de hoogte van de procedure. Aman lost de kubus binnen 2 minuten op terwijl Rohan nog steeds vastzit en aan het eind van de dag slaagde hij er op de een of andere manier in om het op te lossen (mogelijk heeft hij vals gespeeld omdat de procedure noodzakelijk is).
bash voor lus 1 tot en met 10De tijd die nodig is om een probleem op te lossen met een procedure/algoritme is dus veel effectiever dan zonder enige procedure. Daarom is de behoefte aan een algoritme een must.
Als het gaat om het ontwerpen van een oplossing voor een IT-probleem, zijn computers snel, maar niet oneindig snel. Het geheugen is misschien goedkoop, maar niet gratis. Rekentijd is dus een begrensde hulpbron, en dat geldt ook voor de ruimte in het geheugen. We moeten deze bronnen dus verstandig gebruiken en algoritmen die efficiënt zijn in termen van tijd en ruimte zullen u daarbij helpen.
Een algoritme maken:
Omdat het algoritme taalonafhankelijk is, schrijven we de stappen om de logica achter de oplossing aan te tonen die moet worden gebruikt om een probleem op te lossen. Maar voordat u een algoritme schrijft, moet u de volgende punten in gedachten houden:
- Het algoritme moet duidelijk en ondubbelzinnig zijn.
- Er moeten 0 of meer goed gedefinieerde invoerwaarden in een algoritme zijn.
- Een algoritme moet een of meer goed gedefinieerde outputs produceren die equivalent zijn aan de gewenste output. Na een bepaald aantal stappen moeten algoritmen tot stilstand komen.
- Algoritmen moet stoppen of eindigen na een eindig aantal stappen.
- In een algoritme moeten stapsgewijze instructies worden gegeven, en deze moeten onafhankelijk zijn van enige computercode.
Voorbeeld: algoritme om 2 getallen te vermenigvuldigen en het resultaat af te drukken:
Stap 1: Begin
Stap 2: Verkrijg de kennis van invoer. Hier hebben we 3 variabelen nodig; a en b zijn de gebruikersinvoer en c bevat het resultaat.
Stap 3: Declareer a, b, c variabelen.
Stap 4: Neem invoer voor de variabelen a en b van de gebruiker.
Stap 5: Ken het probleem en vind de oplossing met behulp van operators, datastructuren en logicaWe moeten de variabelen a en b vermenigvuldigen, dus gebruiken we de operator * en wijzen het resultaat toe aan c.
Dat is c <- a * bStap 6: Controleer hoe u uitvoer geeft. Hier moeten we de uitvoer afdrukken. Dus schrijf print c
Stap 7: Einde
Voorbeeld 1: Schrijf een algoritme om het maximum van alle elementen in de array te vinden.
Volg de algoritmebenadering zoals hieronder:
Stap 1: Start het programma
Stap 2: Declareer een variabele max met de waarde van het eerste element van de array.
Stap 3: Vergelijk max met andere elementen met behulp van lus.
Stap 4: Als maxStap 5: Als er geen element meer is, retourneer of print max, anders ga naar stap 3.
Stap 6: Einde oplossing
Voorbeeld 2: Schrijf een algoritme om het gemiddelde van 3 onderwerpen te vinden.
Volg de algoritmebenadering zoals hieronder:
Stap 1: Start het programma
Stap 2: Verklaar en lees 3 onderwerpen, laten we zeggen S1, S2, S3
Stap 3: Bereken de som van alle 3 de onderwerpwaarden en sla het resultaat op in de somvariabele (Som = S1+S2+S3)
Stap 4: Deel de som door 3 en wijs deze toe aan de gemiddelde variabele. (Gemiddeld = Som/3)
Stap 5: Druk de waarde af van Gemiddelde van 3 onderwerpen
Stap 6: Einde oplossing
Weet wat de complexiteit van algoritmen is:
Complexiteit in algoritmen verwijst naar de hoeveelheid middelen (zoals tijd of geheugen) die nodig zijn om een probleem op te lossen of een taak uit te voeren. De meest gebruikelijke maatstaf voor complexiteit is tijdscomplexiteit, die verwijst naar de hoeveelheid tijd die een algoritme nodig heeft om een resultaat te produceren als functie van de grootte van de invoer. Geheugencomplexiteit verwijst naar de hoeveelheid geheugen die door een algoritme wordt gebruikt. Algoritmeontwerpers streven ernaar algoritmen te ontwikkelen met de laagst mogelijke tijd- en geheugencomplexiteit, omdat ze hierdoor efficiënter en schaalbaarder worden.
De complexiteit van een algoritme is een functie die de efficiëntie van het algoritme beschrijft in termen van de hoeveelheid gegevens die het algoritme moet verwerken.
Meestal zijn er natuurlijke eenheden voor het domein en bereik van deze functie.
Een algoritme wordt geanalyseerd met behulp van tijdcomplexiteit en ruimtecomplexiteit. Het schrijven van een efficiënt algoritme helpt om de minimale hoeveelheid tijd te verbruiken voor het verwerken van de logica. Voor algoritme A wordt het beoordeeld op basis van twee parameters voor een invoer van grootte n:
- Tijdcomplexiteit: De tijd die het algoritme nodig heeft om het probleem op te lossen. Het wordt gemeten door de iteratie van lussen, het aantal vergelijkingen enz. te berekenen.
- Tijdcomplexiteit is een functie die de hoeveelheid tijd beschrijft die een algoritme nodig heeft in termen van de hoeveelheid invoer voor het algoritme.
- Tijd kan het aantal uitgevoerde geheugentoegangen betekenen, het aantal vergelijkingen tussen gehele getallen, het aantal keren dat een binnenlus wordt uitgevoerd, of een andere natuurlijke eenheid die verband houdt met de hoeveelheid realtime die het algoritme in beslag zal nemen.
- Ruimtecomplexiteit: Ruimte die het algoritme inneemt om het probleem op te lossen. Het omvat de ruimte die wordt gebruikt door noodzakelijke invoervariabelen en eventuele extra ruimte (exclusief de ruimte die wordt ingenomen door invoer) die door het algoritme wordt gebruikt. Als we bijvoorbeeld een hashtabel (een soort datastructuur) gebruiken, hebben we een array nodig om waarden op te slaan
- dit is een extra ruimte die wordt ingenomen en zal daarom meetellen voor de ruimtecomplexiteit van het algoritme. Deze extra ruimte staat bekend als hulpruimte.
- Ruimtecomplexiteit is een functie die de hoeveelheid geheugen (ruimte) beschrijft die een algoritme in beslag neemt in termen van de hoeveelheid invoer voor het algoritme.
- De complexiteit van de ruimte wordt soms genegeerd omdat de gebruikte ruimte minimaal en/of voor de hand liggend is, maar soms wordt het een probleem naarmate de tijd toeneemt.
.De tijdscomplexiteit van de operaties:
postbode
- De keuze van de datastructuur moet gebaseerd zijn op de tijdscomplexiteit van de bewerkingen die zullen worden uitgevoerd.
- Tijdscomplexiteit wordt gedefinieerd in termen van hoe vaak het duurt om een bepaald algoritme uit te voeren, op basis van de lengte van de invoer.
- De tijdscomplexiteit van een algoritme is de hoeveelheid tijd die nodig is om elke instructie te voltooien. Het is sterk afhankelijk van de grootte van de verwerkte gegevens.
- Als u bijvoorbeeld regelmatig zoekopdrachten moet uitvoeren, moet u een binaire zoekboom gebruiken.
.De ruimtecomplexiteit van de operaties:
- De keuze van de datastructuur moet gebaseerd zijn op de ruimtecomplexiteit van de operaties die zullen worden uitgevoerd.
- De hoeveelheid geheugen die door een programma wordt gebruikt om het uit te voeren, wordt weergegeven door de ruimtecomplexiteit.
- Omdat een programma geheugen nodig heeft om invoergegevens en tijdelijke waarden op te slaan tijdens het uitvoeren van , is de ruimtecomplexiteit hulp- en invoerruimte.
- Als u bijvoorbeeld veel gegevens moet opslaan, moet u een array gebruiken.
gevallen met complexiteit:
Er zijn twee vaak bestudeerde gevallen van complexiteit in algoritmen:
1. Complexiteit in het beste geval: Het beste scenario voor een algoritme is het scenario waarin het algoritme de minimale hoeveelheid werk uitvoert (bijvoorbeeld de kortste hoeveelheid tijd in beslag neemt, de minste hoeveelheid geheugen gebruikt, enz.).
2. Complexiteit in het slechtste geval: Het worstcasescenario voor een algoritme is het scenario waarin het algoritme de maximale hoeveelheid werk verricht (bijvoorbeeld de langste hoeveelheid tijd in beslag neemt, de meeste hoeveelheid geheugen gebruikt, enz.).
Bij het analyseren van de complexiteit van een algoritme is het vaak informatiever om het worstcasescenario te bestuderen, omdat dit een gegarandeerde bovengrens geeft voor de prestaties van het algoritme. Soms wordt een best-case scenario-analyse uitgevoerd, maar deze is over het algemeen minder belangrijk omdat deze een ondergrens oplevert die vaak triviaal te bereiken is.
Voordelen van algoritmen
- Makkelijk te begrijpen: Omdat het een stapsgewijze weergave is van een oplossing voor een bepaald probleem, is het gemakkelijk te begrijpen.
- Taalonafhankelijk: Het is niet afhankelijk van welke programmeertaal dan ook, dus het kan door iedereen gemakkelijk worden begrepen.
- Foutopsporing/foutopsporing: Elke stap is onafhankelijk/in een stroom, zodat het gemakkelijk is om de fout op te sporen en op te lossen.
- Subproblemen: Het is in een flow geschreven, zodat de programmeur de taken nu kan verdelen, waardoor het coderen eenvoudiger wordt.
Nadelen van algoritmen
- Het creëren van efficiënte algoritmen is tijdrovend en vereist goede logische vaardigheden.
- Vervelend om vertakkingen en loops in algoritmen te laten zien.