In wiskunde, informatica en andere verwante doctrines wordt het algoritme gedefinieerd als een reeks gevestigde en ondubbelzinnige voorschriften, methodisch en op een beperkte manier gevonden om berekeningen uit te voeren, bepaalde informatie te verwerken, oplossingen te bieden voor problemen en verschillende activiteiten uit te voeren.. Zodra u begint vanuit een begintoestand en een invoer, wordt volgens de vereiste procedures de eindtoestand bereikt en wordt een resultaat verkregen. Algoritmen zijn het onderwerp van onderzoek van algoritmiek en hoewel velen het misschien niet geloven, kunnen ze ook in alle aspecten van het dagelijks leven worden gebruikt.
Wat is een algoritme
Inhoudsopgave
Bij computergebruik wordt het meestal gedefinieerd als een opeenvolging van opeenvolgende instructies, waarin sommige processen worden uitgevoerd om antwoorden te geven op bepaalde beslissingen of behoeften. Op dezelfde manier worden algoritmen vaak gebruikt in de logica en wiskunde, en vormen ze ook de basis voor de ontwikkeling van onder meer gebruikershandleidingen en illustratieve pamfletten. Een van de meest onderscheiden in de wiskunde is die welke wordt toegeschreven aan de meetkundige Euclides, om de grootste gemene deler te bereiken van twee gehele getallen die positief zijn, en de bekende "Gaussiaanse methode" om stelsels van lineaire vergelijkingen te bepalen.
Met betrekking tot de informatica kan deze berekening bekend staan als de reeks richtlijnen die moet worden gevolgd voor het vaststellen van een probleem door middel van een computer.
Daarom wordt algoritmiek opgevat als een discipline die zich richt op de analyse en het ontwerp van algoritmen. Met het oog op het eerste probeert het eigenschappen te onderzoeken, zoals de juistheid en de effectiviteit ervan met betrekking tot tijd en ruimte, om de problemen te begrijpen die algoritmisch kunnen worden opgelost. Wat het tweede betreft, het probeert de reeds bestaande paradigma's te bestuderen en stelt nieuwe voorbeelden voor.
Het algoritme bevindt zich in het centrum van de voortgang van het computergebruik en is belangrijk in de verschillende gebieden ervan. Op deze manier zou het voor services die zo succesvol zijn als Facebook en Google onmogelijk zijn om de omvang van de informatie die ze hebben te verwerken zonder de samenwerking van algoritmen of gespecialiseerde datastructuren. In het dagelijks leven worden echter ook algoritmen gebruikt, een voorbeeld hiervan is de ontsteking van de kachel, omdat deze begint op het moment dat de persoon naar de keuken gaat, deze observeert en zijn einde heeft, wanneer hij hem gaat aansteken.
Kenmerken van een algoritme
Hoewel het algoritme bekend staat als de eindige en geordende reeks van verschillende stappen die leiden tot het oplossen van een probleem, wordt er gezegd dat de aard van deze problemen varieert naargelang de context waarin ze worden aangetroffen, op deze manier zijn er problemen chemisch, wiskundig, filosofisch, onder anderen. Er kan dus worden gezegd dat de aard ervan gevarieerd is en dat de uitvoering door de computer niet nodig is. Naast alles wat eerder is uitgelegd, hebben algoritmen kenmerken die elementair zijn om te bepalen wat ze vandaag zijn en die hieronder worden vermeld.
- De richtlijnen in een algoritme moeten specifiek zijn om te voorkomen dat er ruimte is voor verwarring, dit betekent dat de overeenkomstige instructies op de juiste manier moeten worden opgevolgd, anders zal de grafische weergave van de stroom waarin u zich inschrijft de oplossing niet vergemakkelijken. correct.
- Het moet in perfecte definitie zijn, zoveel mogelijk proberen om het zo vaak als nodig te volgen, om hetzelfde resultaat te verkrijgen en in het geval dat het tegenovergestelde gebeurt, zal het algoritme niet betrouwbaar zijn en zal het niet als leidraad dienen bij het nemen van een beslissing.
- Ze staan bekend om de bijzonderheid dat ze eindig zijn, ze eindigen meestal op een bepaald punt en later gooien ze een resultaat aan het einde van elke stap. Als het algoritme zich oneindig uitstrekt en terugkeert naar een beginpunt dat nooit kan worden opgelost, is er de aanwezigheid van een paradox of de bekende herhalingslus.
- Ten slotte wordt gezegd dat de leesbaarheid van de algoritmen het belangrijkste element is, want als het argument ervan onbegrijpelijk is, konden de overeenkomstige instructies niet worden gevolgd, bovendien is het een directe, duidelijke en laconieke bewoording van de tekst die in elk ervan wordt gevonden.
Delen van een algoritme
Elke algoritmische operatie heeft drie verschillende onderdelen die worden onderworpen aan de basisstructuur van een systeem en deze zijn:
- Invoer: ook wel de header of het startpunt genoemd, het is de initiële instructie die het ontstaan van het algoritme vertegenwoordigt en degene die het lezen motiveert.
- Proces: ook wel declaratie genoemd, het is de precieze uitwerking die door het algoritme wordt geboden en het is in feite de stam van zijn sleutels voor het formuleren van instructies.
- Output: in deze laatste fase worden de specifieke instructies bepaald door het algoritme, bijvoorbeeld zijn commando's of resoluties.
Voorbeelden van algoritmen
Veelvoorkomende voorbeelden van wiskundige berekeningen zijn 2 + 3 = 5 voor optellen en 15-9 = 6 voor aftrekken. Een andere manier om eenvoudige algoritmen te visualiseren is in keukenrecepten, omdat ze een specifiek en geordend proces beschrijven, bijvoorbeeld: “eerst moet je een halve pan water zetten om te verwarmen, dan moet je een snufje zout toevoegen en tot slot de peper zal worden verdeeld om de zaden en de zenuwen te extraheren. " Dit model presenteert een begin, een proces en een einde, die in feite de algoritmen bepalen.
Algoritme typen
Van de verschillende soorten algoritmen die over de hele wereld bestaan, wordt de nadruk gelegd op de algoritmen die zijn geclassificeerd volgens een systeem van tekens en andere op basis van hun functie. Het algoritme is in feite de bekendste oplossing voor het oplossen van een bepaald probleem en volgens zijn strategieën en zijn functies zijn er verschillende soorten, waaronder dynamisch, omgekeerd, brute kracht, opportunistisch, markerend, willekeurig, etc. Naast de hierboven genoemde algoritmen zijn er duizenden die geschikt zijn om problemen op elk gebied op te lossen.
Volgens uw gebarensysteem
Kwalitatief en kwantitatief bevinden zich in deze categorie.
- Kwalitatieve algoritmen worden gekenmerkt door het hebben van verbale elementen, een voorbeeld hiervan zijn de instructies of de erkende "stap voor stap" die mondeling worden verleend, zoals recepten voor culinaire kunsten of procedures voor het uitvoeren van handwerk.
- Kwantitatieve algoritmen zijn het tegenovergestelde van kwalitatieve, vanwege de aanwezigheid van bepaalde numerieke elementen en het gebruik van wiskunde om berekeningen uit te voeren, bijvoorbeeld wanneer de vierkantswortel wordt gevonden of vergelijkingen worden opgelost.
Binnen deze classificatie zijn er ook computationele en niet-computationele algoritmen. De berekeningen worden uitgevoerd door middel van een computer en worden gekenmerkt doordat ze zo complex zijn dat er een machine moet worden uitgevoerd, daarnaast zijn het kwantitatieve algoritmen die kunnen worden geoptimaliseerd. Niet-computationele degenen hebben niet de verplichting om te worden uitgevoerd door middel van een machine of computer; een duidelijk voorbeeld hiervan is de programmering van een televisie.
Volgens zijn functie
De volgende bevinden zich in deze classificatie.
1. Markeringsalgoritme
Dit kenmerkt zich door het gebruik van automatisering om op een zorgvuldige manier prijzen vast te stellen, gericht op factoren als gebruikersgedrag en staat ook bekend als het vermogen om automatisch prijzen te bepalen voor devaluerende componenten, om zo de winst van de gebruikers te vergroten. verkopers. Het is een zeer belangrijke rol gespeeld in de gemeenschappelijke praktijken van de luchtvaartmaatschappij industrie sinds het begin van de jaren 1990.
Het markeringsalgoritme onderscheidt zich doordat het een van de meest voorkomende praktijken is in zeer concurrerende industrieën, en verwijst naar reisbureaus of die online-instellingen. Dit soort algoritmen kan extreem complex of relatief eenvoudig zijn, aangezien in veel gevallen wordt opgemerkt dat ze geoptimaliseerd of autodidactisch zijn met de continuïteit van bepaalde tests. Afgezien daarvan kunnen tagging-algoritmen ook impopulair worden bij klanten, aangezien individuen de neiging hebben zowel stabiliteit als eerlijkheid te waarderen.
2. Probabilistische algoritmen
Het zijn die waarbij de manier waarop de resultaten worden verkregen afhangt van de waarschijnlijkheden, deze staan algemeen bekend als willekeurige algoritmen.
In sommige toepassingen is de afhandeling van dit type bewerking gebruikelijk, bijvoorbeeld wanneer het gedrag van een bestaand of bedacht systeem in de loop van de tijd wordt gesimuleerd, waarbij als gevolg daarvan een toevallige oplossing wordt verkregen. In andere omstandigheden is het op te lossen probleem meestal deterministisch, maar bestaat de mogelijkheid het om te zetten in een toevallig probleem, om het op te lossen door het waarschijnlijkheidsalgoritme toe te passen. Het positieve van de willekeurige is dat hun toepassing geen zeer geavanceerde wiskundige studies vereist.
Daarnaast zijn er binnen deze groep drie hoofdtypen die bekend staan als numeriek, Monte Carlo en Las Vegas.
- Numerieke algoritmen kunnen een benaderend resultaat van het probleem opleveren en worden over het algemeen toegepast in engineering.
- Monte Carlo-algoritmen kunnen de juiste of verkeerde oplossing geven en hebben een bepaalde foutmarge en ten slotte.
- Las Vegas-algoritmen onderscheiden zich door nooit een onjuist antwoord achter te laten, in feite vinden ze de juiste oplossing of informeren ze u eenvoudig over de mogelijke mislukking.
Dynamisch programmeren verwijst naar de methode waarmee het algoritme de resultaten berekent. Soms zijn de oplossingen van bepaalde elementen die de problemen hebben, afhankelijk van de resultaten van andere kleinere problemen. Om deze problemen op te lossen, moeten dezelfde waarden dus opnieuw worden berekend om de kleinste subproblemen op te lossen, maar dit kan verspilde cycli veroorzaken. Om dit op te lossen, kan dynamisch programmeren worden gebruikt en in dit geval wordt de oplossing van elk subprobleem onthouden, om dezelfde waarde te gebruiken in plaats van deze meerdere keren te herhalen.
3. Heuristische algoritmen
Ze onderscheiden zich door het vinden van oplossingen en toch garanderen ze niet dat de beste antwoorden zullen worden gevonden, om deze reden kunnen ze worden beschouwd als benaderende algoritmen. Deze kunnen worden gebruikt wanneer het vinden van een oplossing via een normale route onmogelijk wordt geacht. Heuristieken bieden de toepassingen die hieronder zullen worden uitgelegd. Bij de planning worden ze gebruikt om activiteiten in korte tijd te plannen, bij het ontwerp worden ze gebruikt om elektrische of digitale systemen af te bakenen en bij simulatie worden ze gebruikt om bepaalde procedures te verifiëren.
4. Backtracking-algoritmen
Ze staan bekend als recursieve strategieën die problemen oplossen, zoals puzzels, doolhoven of soortgelijke stukken, waarbij diep wordt gezocht naar een mogelijke oplossing. De naam verwijst naar het feit dat het bij het zoeken naar een resultaat altijd teruggaat naar het vorige punt om alternatieven te kunnen testen. Deze worden meestal ingetrokken om hun impact op de economie, op de markten, op prijsaanduidingen, op bepaalde operaties en zelfs op de samenleving zelf te observeren.
5. Hebzuchtig algoritme
Het staat bekend als de vernietiger of de zoetekauw en is toepasbaar bij optimalisatieproblemen, bij elke stap van dit algoritme wordt een logische en optimale keuze gemaakt om te eindigen met de beste van de globale oplossingen. Er moet echter rekening mee worden gehouden dat zodra een oordeel is bereikt, er in de toekomst absoluut niets meer kan worden gedaan om dit te corrigeren of te veranderen. Deze operatie heeft deze naam omdat bij elke stap de beste fractie wordt gekozen die kan "slikken" zonder dat u zich zorgen hoeft te maken over wat er later gebeurt.
Eigenschappen van een algoritme
Verschillende auteurs hebben geprobeerd algoritmen op een formele manier te definiëren met behulp van wiskundige modellen. Deze exemplaren zijn echter nauw verwant aan een eigenaardig type informatie dat cijfers, symbolen en enkele grafieken omvat, terwijl ze werken op een enorme hoeveelheid gegevensdistributie. Over het algemeen wordt de gemeenschappelijke deelname van elk van de definities samengevat in de volgende drie eigenschappen:
Probleemstelling
Het oplossen van problemen door middel van een computer kan bestaan uit dat proces waarin een probleem wordt beschreven en een programma waarmee het probleem kan worden opgelost, mag worden ontwikkeld. Dit proces vereist de analyse van het probleem, het ontwerp van een algoritme en de transformatie ervan naar een programma, evenals de prestaties en validatie ervan. De eerste twee stappen zijn het meest complex in dit proces, maar als je eenmaal het probleem hebt onderzocht en een algoritme hebt gevonden dat het kan oplossen, is je taak voornamelijk gebaseerd op het vertalen ervan in de gewenste programmeertaal.
Analyse van de algemene oplossing
Zodra het probleem is gedefinieerd, is het tijd om het volgende te analyseren:
- De informatie van de tickets die ze ons bezorgen.
- De gewenste resultaten.
- Het domein van werk, verklaringen of andere noodzakelijke elementen.
De analyse van algoritmen staat bekend als het belangrijkste onderdeel van de bredere computationele complexiteitstheorie, omdat het theoretische berekeningen biedt voor de bronnen die elk algoritme nodig heeft om een bepaald rekenprobleem op te lossen. Bij het uitvoeren van een theoretisch onderzoek is het gebruikelijk om de complicaties ervan asymptotisch te berekenen om een voldoende grote invoergrootte te verkrijgen. De asymptotische bovengrens samen met de theta- en omega-notaties worden voor dit doel gebruikt en er moet worden opgemerkt dat de niet-asymptotische maat kan worden berekend.
Nauwkeurige efficiëntiemaatregelen zijn erg handig voor degenen die de algoritmen daadwerkelijk gebruiken, omdat ze meer precisie hebben en hierdoor kunnen ze de tijd bepalen die nodig is om uit te voeren. Voor sommige personen, zoals makers van videogames, kan de verborgen constante een groot verschil maken tussen succes en mislukking. Tijdevaluaties kunnen afhangen van hoe een bepaalde stap is gedefinieerd en om de analyse zinvol te laten zijn, moet worden gegarandeerd dat de tijd duidelijk wordt beperkt door een constante.
Uitwerking van het algoritme
Om de ontwikkeling van een operatie uit te voeren, is het belangrijk dat een reeks procedures wordt uitgevoerd om te voldoen aan de oplossing van een probleem zelf. Om te beginnen moet een voorafgaande analyse van de moeilijkheid worden uitgevoerd en dit wordt gedaan door middel van een studie die de ware werking van het probleem aantoont lang voordat een algoritme wordt uitgevoerd. Daarom wordt de definitie van vereisten geëvalueerd, in deze stap moet u een duidelijk idee hebben van welke problemen u moet oplossen, of het nu de som van twee getallen is, de volgorde van een lijst met getallen, enz.
Later wordt de respectievelijke identificatie van modules uitgevoerd, aangezien de juiste prestatie van algoritmen ervan afhangt om mogelijke oplossingen te bieden voor de vereisten die hierboven werden geïdentificeerd.
Ten slotte wordt de berekening geïmplementeerd in een programmeertaal die begrijpelijk is voor een computer, zodat deze de instructies die hij modelleert kan begrijpen en deze dus kan uitvoeren om het verwachte resultaat te bereiken. Bij deze laatste procedure is al sprake van een programma dat is samengesteld uit een reeks instructies die achter elkaar worden besteld en die vastgelegde eisen weten op te lossen.
Het is belangrijk te vermelden dat in opeenvolgende tijd de algoritmen hun functie uitvoeren in een gediscretiseerde tijd en proberen de opeenvolgingen van computationele toestanden te definiëren in elke invoer die als geldig wordt beschouwd. In de abstracte toestand zijn deze operaties onafhankelijke elementen en men neemt aan dat daarin de oorspronkelijke ordeningsstructuren onder isomorfisme onveranderlijk kunnen worden. Bij begrensde verkenning worden de overgangen van de ene staat naar de andere volledig vastgelegd door een permanente en eindige uitleg, waarbij tussen de ene staat en de volgende alleen rekening wordt gehouden met het beperkte aantal termen van de huidige staat.
Het mag ook niet over het hoofd worden gezien dat algoritmen gewoonlijk worden uitgedrukt door middel van programmeertalen die "pseudocodes", de gebruikelijke taal en zelfs de bekende stroomdiagrammen zijn. Evenzo is het belangrijk om te vermelden dat algoritmen een fundamentele rol spelen bij het computergebruik vanwege hun weergave van gegevens als reeksen bits. Vanuit een andere hoek wordt een programma gedefinieerd als het algoritme dat de computer die specifieke stappen uitdrukt die het moet volgen om bepaalde activiteiten adequaat te vervullen. Aan de andere kant maakt het leren schrijven van pseudocode het programmeren gemakkelijker en zal daarom later worden uitgelegd.
Programmeertalen staan bekend als een formele of kunstmatige taal omdat ze goed gedefinieerde grammaticaregels hebben, het heeft de mogelijkheid om de programmeur de mogelijkheid te bieden om een reeks instructies of reeksen voorschriften te textualiseren in de vorm van algoritmen met het doel om controle te houden over het fysieke en logische gedrag van de computer, kunnen op deze manier de verschillende soorten informatie worden bereikt. Deze set van voorschriften geschreven door middel van een programmeertaal wordt genoemd een programma.
Programmeertalen bestaan meestal uit een reeks symbolen en grammaticale en semantische regels die de huidige structuren van de taal en hun betekenis definiëren. Vanuit een ander perspectief omvatten computertalen ook programmeertalen, een duidelijk voorbeeld hiervan is HTML, die aan bepaalde instructies voldoet om de inhoud van verschillende documenten uit te voeren. De programmeertaal kan de precieze specificatie van die gegevens mogelijk maken die onder een breed scala van omstandigheden door specifieke software moeten worden bediend.
Aan de andere kant is pseudocode de algoritmische beschrijvingstaal die de elementaire conventies van een echte programmeertaal gebruikt, maar die is ontworpen om door mensen te worden gelezen in plaats van door een machine te lezen, waardoor de onafhankelijkheid van elk ander type taal behouden blijft. programmeertaal. De pseudo-code negeert details die niet als essentieel worden beschouwd voor het menselijk begrip van het algoritme, zoals systeemcodes, declaraties van variabelen en zelfs sommige subroutines. Op deze manier tracht de programmeertaal zichzelf aan te vullen met nauwkeurige beschrijvingen in natuurlijke taal of met compacte wiskundige notaties.