Video: Computational Linguistics, by Lucas Freitas 2024
Stel je voor dat je probeert een item in een lijst te vinden zonder het eerst te sorteren. Elke zoekopdracht wordt een tijdrovende opeenvolgende zoekopdracht. Maar er kan een zaak worden gemaakt voor het niet sorteren van gegevens voor algoritmen. De data is immers nog steeds toegankelijk, ook als u deze niet sorteert - en sorteren kost tijd.
Natuurlijk is het probleem met ongesorteerde gegevens hetzelfde probleem als die rommellade in uw keuken (of waar u uw rommellade ook heeft - ervan uitgaande dat u die helemaal kunt vinden). Op zoek naar iets in de rommellade is tijdrovend omdat je niet eens kunt beginnen te raden waar je iets kunt vinden. In plaats van gewoon naar binnen te gaan en te nemen wat je wilt, moet je ontelbare andere items die je niet wilt opnemen in een poging om het enige item te vinden dat je nodig hebt. Helaas staat het artikel dat je nodig hebt misschien niet in de rommellade - je hebt het misschien weggegooid of in een andere la gestoken.
De rommellade in uw huis is net als ongesorteerde gegevens op uw systeem. Wanneer de gegevens ongesorteerd zijn, moet u één item tegelijk doorzoeken en weet u niet eens of u zult vinden wat u nodig hebt zonder eerst elk item in de gegevensset te doorzoeken. Het is een frustrerende manier om met gegevens te werken.
Het is natuurlijk niet voldoende om alleen de gegevens te sorteren. Als u een werknemersdatabase hebt gesorteerd op achternaam, maar toch een medewerker moet zoeken op geboortedatum, is sorteren niet zinvol. (Stel dat u alle werknemers wilt vinden die op een bepaalde dag jarig zijn.) Om de geboortedatum te vinden die u nodig heeft, moet u de hele dataset één item per keer doorzoeken. Sortering moet daarom gericht zijn op een specifieke behoefte. Ja, u had de werknemersdatabase per afdeling op een bepaald punt en op achternaam op een ander tijdstip nodig, maar nu hebt u deze gesorteerd op geboortedatum nodig om de gegevensset effectief te gebruiken.
De noodzaak om verschillende gesorteerde orders voor dezelfde gegevens te onderhouden, is de reden dat ontwikkelaars indexen hebben gemaakt. Het sorteren van een kleine index gaat sneller dan het sorteren van de volledige dataset. De index onderhoudt een specifieke gegevensvolgorde en verwijst naar de volledige gegevensset, zodat u kunt vinden wat u extreem snel nodig hebt. Als u voor elke sorteerbehoefte een index bijhoudt, kunt u de toegangstijd voor gegevens effectief verkorten en meerdere personen toegang verlenen tot de gegevens op hetzelfde moment in de volgorde waarin ze moeten worden geopend.
Er zijn veel manieren om sorteeralgoritmen te categoriseren. Een van deze manieren is de snelheid van het soort. Wanneer wordt nagegaan hoe effectief een bepaald sorteeralgoritme is bij het ordenen van de gegevens, kijken timingbenchmarks doorgaans naar twee factoren:
- Vergelijkingen: Als u gegevens van de ene locatie in een gegevensset naar een andere wilt verplaatsen, moet u weten waar u deze naartoe moet verplaatsen, wat betekent dat de doelgegevens worden vergeleken met andere gegevens in de gegevensset.Minder vergelijkingen betekent betere prestaties.
- Ruilen: Afhankelijk van de manier waarop u een algoritme schrijft, komen de gegevens mogelijk niet op de uiteindelijke locatie in de gegevensset bij de eerste poging. De gegevens kunnen zelfs meerdere keren worden verplaatst. Het aantal uitwisselingen heeft een grote invloed op de snelheid omdat u nu feitelijk gegevens van de ene naar de andere locatie in het geheugen verplaatst. Minder en kleinere uitwisselingen (zoals bij het gebruik van indexen) betekent betere prestaties.