CyberStars

Linear Search

Căutarea este unul dintre cele mai fundamentale lucruri pe care le face un calculator. „Este acest utilizator în baza de date?" „Conține această listă numărul 42?" „Unde este cuvântul 'error' în acest jurnal?"

Cel mai simplu mod de a căuta este căutarea liniară: parcurgem lista element cu element, de la început la sfârșit, și verificăm fiecare element

def cautare_liniara(elemente, tinta):
    for i in range(len(elemente)):
        if elemente[i] == tinta:
            return i
    return -1

nume = ["Tommy", "Lance", "Cortez", "Phil", "Sonny"]
rezultat = cautare_liniara(nume, "Cortez")
print(rezultat)

Afișează 2. Cortez este la indexul 2

Dacă ținta nu este în listă, returnăm -1 (o convenție care înseamnă „negăsit")

rezultat = cautare_liniara(nume, "Shrek")
print(rezultat)

Afișează -1. Shrek nu este în Vice City


Cum funcționează? Ne uităm la poziția 0: este Cortez? Nu. Poziția 1: este Cortez? Nu. Poziția 2: este Cortez? Da! Returnăm 2

Dacă parcurgem întreaga listă fără să găsim ținta, returnăm -1


Putem de asemenea să căutăm ceva pe baza unei condiții, nu doar o potrivire exactă

scoruri = [65, 42, 88, 95, 71]

for i in range(len(scoruri)):
    if scoruri[i] > 90:
        print(f"Am gasit un scor peste 90: {scoruri[i]} la indexul {i}")
        break

Afișează Am găsit un scor peste 90: 95 la indexul 3


Cât de bună este căutarea liniară? Dacă lista are 10 elemente, s-ar putea să verificăm toate cele 10. Dacă are 1.000.000 de elemente, s-ar putea să verificăm toate cele 1.000.000. Căutarea liniară verifică elementele unul câte unul. Cu cât mai multe elemente, cu atât durează mai mult. În cel mai rău caz (elementul negăsit), verificăm fiecare element în parte

Există ceva mai rapid? Da, căutarea binară, pe care o vom învăța mai târziu. Dar căutarea binară funcționează doar pe liste sortate. Căutarea liniară funcționează pe orice


Misiune: Localizatorul Echipajului

Lista echipajului stației este o listă de nume numită echipaj, fiecare la o stație numerotată (stația 0, stația 1, și așa mai departe). Controlul Misiunii vrea să caute pe cineva după nume.

Scrie o funcție gaseste_echipaj(echipaj, tinta) care folosește căutarea liniară ca să returneze numărul stației (indexul) unde se află tinta în listă. Dacă numele nu este în listă, returnează -1.

Apoi citește un nume și raportează rezultatul.

Intrare:

  • numele membrului echipajului de găsit

Ieșire: o linie. Dacă numele este la bord, afișează numele, apoi este la statia, apoi numărul stației. Dacă nu, afișează numele urmat de nu este la bord. Vezi exemplul de mai jos pentru formularea exactă.

Exemplu

Dacă utilizatorul tastează

Cara

programul ar trebui să afișeze

Cara este la statia 2

Dacă utilizatorul tastează

Zane

programul ar trebui să afișeze

Zane nu este la bord