Video: Hoe Werkt Het Algoritme Achter Tools Zoals JungleScout? 2024
Een functie in de wiskunde is eenvoudigweg een manier om sommige invoer naar een antwoord in kaart te brengen. Op een andere manier uitgedrukt, is een -functie een transformatie (gebaseerd op wiskundige bewerkingen) die uw invoer transformeert (toewijst) tot een antwoord.
Voor bepaalde invoerwaarden (meestal aangeduid met de letters x of n), hebt u een overeenkomstig antwoord met de wiskunde die de functie definieert. Een functie als f (n) = 2 n vertelt u dat wanneer uw invoer een getal n, is, uw antwoord is het getal n vermenigvuldigd met 2.
Het is logisch om de grootte van de invoer te gebruiken, aangezien dit een tijdkritische periode is en het leven van mensen vol zit met een groeiende hoeveelheid gegevens. Alles een wiskundige functie maken is iets minder intuïtief, maar een functie die beschrijft hoe een algoritme zijn oplossing relateert aan de hoeveelheid gegevens die het ontvangt, is iets dat je kunt analyseren zonder specifieke hardware- of softwaresteun. Het is ook eenvoudig te vergelijken met andere oplossingen, gezien de omvang van uw probleem. Analyse van algoritmen is echt een verbluffend concept, omdat het een complexe reeks stappen reduceert tot een wiskundige formule.
Bovendien is een analyse van algoritmen meestal niet eens geïnteresseerd in het precies definiëren van de functie. Wat u echt wilt doen, is een doelfunctie vergelijken met een andere functie. Deze vergelijkingsfuncties verschijnen binnen een reeks voorgestelde functies die slecht presteren in tegenstelling tot het doelalgoritme. Op deze manier hoeft u geen nummers aan te sluiten in functies met een grotere of kleinere complexiteit; in plaats daarvan behandel je eenvoudige, vooraf bekende en bekende functies. Het klinkt misschien ruw, maar het is effectiever en lijkt op het classificeren van de prestaties van algoritmen in categorieën, in plaats van het verkrijgen van een exacte prestatiemeting.
De reeks gegeneraliseerde functies wordt Big O genoemd en u komt vaak deze kleine reeks functies tegen (tussen haakjes gezet en voorafgegaan door een hoofdletter O >) worden gebruikt om de prestaties van algoritmen weer te geven. De afbeelding toont de analyse van een algoritme. Een cartesisch coördinatensysteem kan de functie vertegenwoordigen zoals gemeten door RAM-simulatie, waarbij de abscis (de x-coördinaat) de grootte van de invoer is en de ordinaat (de y-coördinaat) resulterend aantal operaties. U ziet drie curven weergegeven. Invoerformaat is van belang. Kwaliteit is echter ook van belang (bijvoorbeeld bij het bestellen van problemen is het sneller om een invoer te bestellen die al bijna is besteld).Bijgevolg vertoont de analyse het slechtste geval, f 1 (n), een gemiddeld geval f 2 (n), en een beste case, f 3 (n). Hoewel de gemiddelde case u een algemeen idee zou kunnen geven, is het belangrijkste dat u echt belangrijk vindt, omdat er problemen kunnen optreden wanneer uw algoritme moeite heeft om een oplossing te bereiken. De Big O-functie is de functie die, na een bepaalde
n0
waarde (de drempelwaarde voor het beschouwen van een grote invoer), altijd resulteert in een groter aantal bewerkingen met dezelfde invoer dan de slechtst mogelijke functie > f1
. De Big O-functie is dus zelfs pessimistischer dan degene die je algoritme vertegenwoordigt, zodat je, ongeacht de kwaliteit van de invoer, er zeker van kunt zijn dat de dingen niet erger kunnen worden.
Complexiteit van een algoritme in geval van beste, gemiddelde en slechtste invoer.
Veel mogelijke functies kunnen resulteren in slechtere resultaten, maar de keuze van de functies die worden aangeboden door de Big O-notatie die u kunt gebruiken, is beperkt omdat het doel is om de complexiteitsmeting te vereenvoudigen door een standaard voor te stellen. Daarom bevat dit gedeelte slechts enkele functies die deel uitmaken van de Big O-notatie. De volgende lijst beschrijft ze in groeiende volgorde van complexiteit:
Dezelfde tijd, ongeacht hoeveel input u levert. Uiteindelijk is het een constant aantal bewerkingen, ongeacht hoe lang de invoergegevens zijn. Deze mate van complexiteit is in de praktijk vrij zeldzaam.
- Logaritmische complexiteit O (log n): Het aantal bewerkingen groeit langzamer dan de invoer, waardoor het algoritme minder efficiënt is met kleine invoer en efficiënter met grotere. Een typisch algoritme van deze klasse is de binaire zoekopdracht.
- Lineaire complexiteit O (n): De bewerkingen nemen toe met de invoer in een verhouding van 1: 1. Een typisch algoritme is iteratie, dat is wanneer u de invoer eenmaal scant en een bewerking toepast op elk element ervan.
- Lineairithmische complexiteit O (n log n): Complexiteit is een mix tussen logaritmische en lineaire complexiteit. Het is typerend voor enkele slimme algoritmen die worden gebruikt om gegevens te ordenen, zoals Mergesort, Heapsort en QuickSort.
- Kwadratische complexiteit O (n 2
- ): Bewerkingen groeien als een vierkant van het aantal ingangen. Wanneer je één iteratie hebt binnen een andere iteratie (geneste iteraties, in de informatica), heb je een kwadratische complexiteit. U hebt bijvoorbeeld een lijst met namen en om de meest vergelijkbare te vinden, vergelijkt u elke naam met alle andere namen. Sommige minder efficiënte ordeningsalgoritmen vertonen een dergelijke complexiteit: bubbelsortering, selectiesortering en invoegtypen. Dit niveau van complexiteit betekent dat uw algoritmen uren of zelfs dagen kunnen duren voordat ze een oplossing bereiken. Kubieke complexiteit O (n 3
- ): Bewerkingen groeien zelfs sneller dan kwadratische complexiteit omdat u nu meerdere geneste iteraties hebt. Wanneer een algoritme deze volgorde van complexiteit heeft en u een bescheiden hoeveelheid gegevens (100, 000 elementen) moet verwerken, kan uw algoritme jaren duren.Wanneer u een aantal bewerkingen hebt die de input zijn, is het gebruikelijk om te verwijzen naar het algoritme dat loopt in polynomiale tijd. Exponentiële complexiteit O (2 n
- ): Het algoritme neemt tweemaal het aantal vorige bewerkingen voor elk toegevoegd nieuw element. Wanneer een algoritme deze complexiteit heeft, kunnen zelfs kleine problemen voor altijd duren. Veel algoritmen die uitputtend zoeken, hebben een exponentiële complexiteit. Het klassieke voorbeeld voor dit niveau van complexiteit is echter de berekening van Fibonacci-getallen. Factorische complexiteit O (n!): Een echte nachtmerrie van complexiteit vanwege het grote aantal mogelijke combinaties tussen de elementen. Stelt u zich eens voor: als uw invoer 100 objecten is en een bewerking op uw computer 10
- -6 seconden kost (een redelijke snelheid voor elke computer, tegenwoordig), heeft u ongeveer 10 140 jaar nodig om de taak met succes te voltooien (een onmogelijke hoeveelheid tijd sinds de ouderdom van het universum wordt geschat op 10 14 jaar). Een beroemd facetcomplexiteitsprobleem is het reizende verkoopprobleem, waarbij een verkoper de kortste route moet vinden om vele steden te bezoeken en terug te komen naar de startstad.