/ / Binär sökning är ett av de enklaste sätten att hitta ett element i en matris

Binär sökning är ett av de enklaste sätten att hitta ett element i en matris

Ganska ofta programmerare, till och med nybörjare,står inför det faktum att det finns en uppsättning siffror där det är nödvändigt att hitta ett visst antal. Denna samling kallas en array. Och för att hitta det önskade elementet i det finns det många sätt. Men det enklaste bland dem är binär sökning. Vad är den här metoden? Och hur implementerar du binär sökning? Pascal är den enklaste miljön för att organisera ett sådant program, så vi kommer att använda det för att studera.

Låt oss först titta på vad som är fördelarna med den här metoden, för på så sätt kan vi förstå

binär sökning
vad är poängen med att studera detta ämne. Anta att det finns en matris med minst 100 000 000 element där du behöver hitta en viss. Naturligtvis kan detta problem enkelt lösas med en enkel linjär sökning, där vi använder en slinga för att jämföra det önskade elementet med alla de i matrisen. Problemet är att det tar för lång tid att genomföra denna idé. I ett enkelt Pascal-program för flera procedurer och med tre rader huvudtext kommer du inte att märka detta, men när du startar mer eller mindre stora projekt med många grenar och bra funktionalitet tar det färdiga programmet för lång tid att ladda. Speciellt om datorn har dålig prestanda. Därför finns det en binär sökning som minskar söktiden med minst hälften.

Så, vad är principen för dettametod? Det bör sägas genast att binär sökning inte fungerar i någon matris, utan bara i en sorterad uppsättning siffror. Vid varje nästa steg tas mittelementet i matrisen (vilket betyder med elementnumret). Om det önskade antalet är större än genomsnittet kan allt som finns till vänster, det vill säga mindre än mittelementet, kasseras och inte sökas där. Och tvärtom, om det är mindre än genomsnittet - bland dessa siffror till höger kan du inte söka. Låt oss sedan välja ett nytt sökområde, där det första elementet kommer att vara mittelementet i hela matrisen, och det sista förblir det sista. Medelantalet för det nya området kommer att vara ¼ för hela segmentet, det vill säga (det sista elementet + mittelementet för hela arrayen) / 2. Återigen utförs samma operation - jämförelse med arrayens genomsnitt. Om det önskade värdet är mindre än genomsnittet kasserar vi höger sida och gör detsamma vidare tills det här mittelementet visar sig vara önskat.

binär sökning pascal

Naturligtvis är det bäst att titta på ett exempel på hur binär sökning skrivs. Alla Pascal kommer att göra här - versionen är inte viktig. Låt oss skriva ett enkelt program.

Den innehåller en matris från 1 till h"massiv", variabel som anger den nedre gränsen för sökningen med namnet "niz", den övre gränsen med namnet "verh", den mellersta söktermen med namnet "sredn"; och det erforderliga antalet är "isk".

Så först tilldelar vi de övre och nedre gränserna för sökintervallet:

niz: = 1;
verh: = h + 1;

Sedan organiserar vi cykeln "medan den nedre är mindre än den övre gränsen":

Medan niz <verh - 1 gör
Börja

Vid varje steg delar vi segmentet med 2:

sredn: = (niz + verh) div 2; {använd div-funktion eftersom vi delar utan resten}

Varje gång vi kollar. Om genomsnittet är lika med önskat avbryter vi slingan, eftersom det nödvändiga elementet redan har hittats:

om sredn = isk då bryts;

Om mittelementet i matrisen är större än önskat, kasta vänster sida, det vill säga tilldela mittelementet till den övre gränsen:

om massiv [sredn]> isk då verh: = sredn;

Och om tvärtom, gör vi det till den nedre gränsen:

annars niz: = sredn;
slutet;

Det är allt som kommer att finnas i programmet.

Låt oss se hur den binära metoden kommer att se ut i praktiken. Låt oss ta en matris så här: 1, 3, 5, 7, 10, 12, 18 och leta efter siffran 12 i den.

Totalt har vi 7 element, så mitten blir den fjärde, dess värde är 7.

1357101218

Eftersom 12 är större än 7 kan vi kasta bort elementen 1,3 och 5. Sedan har vi fyra siffror kvar, 4/2 utan att resten är 2. Så det nya mittelementet blir 10.

7101218

binär sökning pascal
Eftersom 12 är större än 10, kasserar vi 7. Endast 10, 12 och 18 återstår.

Här är mittelementet redan 12, detta är önskat nummer. Uppgift slutförd - nummer 12 hittat.

gillade:
0
Populära inlägg
Andlig utveckling
mat
y