Datastructuren en algoritmen

Welke eigenschap van het Boyer-Moore-algoritme om een patroon in een tekenreeks te vinden is juist?

  1. AHet vergelijkt het patroon vanaf het laatste teken en gebruikt informatie, bijvoorbeeld dat het niet-overeenkomende teken van de tekst niet in het patroon voorkomt, om het patroon in één keer een flink eind op te schuiven
  2. BHet schuift het patroon vanaf het begin van de tekst telkens één teken op en vergelijkt elke keer alle tekens van het patroon van eerste tot laatste
  3. CHet sorteert zowel de tekst als het patroon en vindt het patroon daarna met binair zoeken
Antwoord en toelichting tonen

Antwoord: A. Het vergelijkt het patroon vanaf het laatste teken en gebruikt informatie, bijvoorbeeld dat het niet-overeenkomende teken van de tekst niet in het patroon voorkomt, om het patroon in één keer een flink eind op te schuiven

Het Boyer-Moore-algoritme vergelijkt het patroon vanaf het laatste teken en berekent vooraf tabellen, zodat het hele patroon bijvoorbeeld voorbij een niet-overeenkomend teken van de tekst kan worden geschoven als dat teken helemaal niet in het patroon voorkomt. Daardoor kan het in natuurlijke tekst veel tekens overslaan zonder ze te vergelijken. Bij een tekst van lengte n en een patroon van lengte m kost de naïeve methode, die telkens één teken opschuift en alles vergelijkt, in het slechtste geval O(nm). Het KMP-algoritme gebruikt ook informatie over de mismatch om op te schuiven, maar vergelijkt vanaf het begin van het patroon en garandeert ook in het slechtste geval O(n + m).

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over Datastructuren en algoritmen

  1. Een dynamische array reserveert, als er een element wordt toegevoegd terwijl hij vol is, een nieuw gebied met de dubbele capaciteit en kopieert alle elementen daarheen. Hoeveel elementkopieën worden er in totaal gemaakt als 1000 elementen één voor één worden toegevoegd aan een lege array met capaciteit 1?
  2. Wat is de meest passende reden dat open adressering met lineair proberen bij een hashtabel met veel elementen en een bezettingsgraad van ongeveer 0,5 vaak sneller is dan chaining (elementen koppelen met gelinkte lijsten)?
  3. Voor sorteren op parallelle hardware zoals GPU's worden soms sorteermethoden met een vaste reeks vergelijk-en-verwisselstappen (sorteernetwerken) gebruikt, zoals bitonic sort. Waarom?
  4. Wat is de tijdcomplexiteit van een bewerking die in een array van n elementen elk paar van twee verschillende elementen precies één keer vergelijkt (een dubbele lus die element i vergelijkt met alle elementen erna en i telkens één stap verder zet)?
  5. Een programma met tijdcomplexiteit O(n²) doet er 0,5 seconde over bij 1000 gegevens. Hoeveel seconden duurt het ongeveer bij 4000 gegevens?