Tip:
Highlight text to annotate it
X
[Powered by Google Translate] [Linear Søg]
[Patrick Schmid, Harvard University]
[Dette Er CS50.] [CS50.TV]
Søger er noget, du sandsynligvis gøre oftere, end du tror.
Det er klart, hver gang du åbner en webbrowser
og søg efter en webside -
eller søg efter dine venner på din favorit social networking site -
du søger.
Men det er bare en lille del af den søgen, som du gør på daglig basis.
Når du ønsker at finde den ene blå skjorte i skabet,
eller det perfekte rød bluse til lejligheden,
du søger.
Når du går til en butik, som du aldrig har været i før,
og du leder efter broccoli i producere midtergangen
du søger.
Hvad du måske er begyndt at lægge mærke til
er, at afhængig af hvad du leder efter
eller hvordan elementerne er organiseret, når du leder efter dem
det har en indvirkning på, hvordan du søger.
For eksempel, hvis dine skjorter hænger i skabet
kan du sikkert bare plukke det ud uden megen søgning.
Hvis du antager at du er nødt til at gå ned ad kirkegulvet
at få broccoli, har du sandsynligvis nødt til at se på alle andre grøntsager
før du opdager, at broccoli.
Lineær søgning er et eksempel på en sådan søgemetode - eller algoritme.
Som navnet antyder,
denne metode søger efter et emne på en lineær måde, den ene efter den anden.
Så når du ser på resultaterne fra din foretrukne søgemaskine
og du læser ned på listen over resultater
du bruger lineær søgning.
Okay. Lad os se på et eksempel.
Sige, at vi har en liste over numre - 2, 4, 0, 5, 3, 7, 8, og 1 -
og vi leder efter det antal 0.
Selvfølgelig kan du bare se, at 0 er i den tredje position.
Men et edb-program er ikke så heldige.
Den kan kun "se" et tal ad gangen.
Så starter i begyndelsen af listen,
det kun "ser" den 2.
Programmet så tjekker - er 2 lig med 0?
Naturligvis ikke. Så det går videre til det næste nummer, 4.
Har 4 lige store 0? Nope.
Den næste, 0. Ah! Nul er 0.
Der har vi det! Det er i den tredje position.
Okay. Lad os se på nogle pseudokode.
Det er kun et par linjer lange, men lad os se på det én linje ad gangen.
Først, lad os definere funktionen - og vi vil kalde det lineære søgning -
og det tager to argumenter - tasten og array.
Det centrale er, at værdi, som vi leder efter,
det i det foregående eksempel, var, at nul.
Et array er en liste over numre
der har alle de værdier, som vi kommer til at søge.
Så, hvad vi ønsker at gøre, er at vi ønsker at se på -
fra alle positioner, der starter så i begyndelsen af grupperingen
to selve ende af formationen - så længden af array -
se på hver enkelt position og kontrollere hver enkelt.
Så det er hvad der "for" loop gør.
Og ved hver position, vi kommer til at sige
"Er denne værdi ved at den nuværende position er lig med den nøgle, vi leder efter?"
Så - i det foregående eksempel igen, tast var 0 -
så vi siger "Er det array ved position i lig med nul?"
Hvis det er, vi kommer til at vende tilbage 'i', fordi det er den aktuelle position, vi er på.
Så i det foregående eksempel,
det var den tredje position.
Hvis vi har været igennem hele systemet
og vi har ikke fundet noget -
så lad os sige, vi ledte efter nummeret 500
som klart ikke var i dette eksempel -
vi er nødt til at returnere noget,
og vi vil vende tilbage -1.
Og vi er bare returnere -1, fordi det er en position
, der ikke findes i arrayet.
Og så betyder når du får den tilbage fra en funktion
den siger "Hmm, okay. Jeg tror jeg fandt ikke noget.
Så det 500 aldrig var der. "
Det gode ved lineær søgning er, at
det vil arbejde på en liste over poster,
uanset hvordan punkterne er bestilt.
Det betyder ikke noget, hvor broccoli er i producere midtergangen.
Så længe du går ned ad kirkegulvet fra begyndelsen til slutningen,
du er bundet til at finde det,
under forudsætning af butikken har ikke kørt ud af broccoli, selvfølgelig.
Men det største styrke er også dens største svaghed.
Sige, at du har en liste med 200 numre
der er sorteret fra 1 til 200.
Hvis du leder efter det nummer 198,
du er nødt til at søge næsten hele listen over numre
før du finder det, du leder efter.
Der må være en bedre måde!
Forvisset der er.
Men, det er et emne for en anden video.
Også, ikke ærgre sig!
Bare fordi lineær søgning er ikke den bedste løsning i alle situationer,
det betyder ikke, at det ikke kommer i handy.
Ellers hvordan ville du opdage, at broccoli i producere midtergangen?
Mit navn er Patrick Schmid, og dette er CS50.
[CS50.TV]