Tavs šīs stundas izaicinājums: Saprast atšķirību starp "meklēt visu pēc kārtas" un "gudro meklēšanu". Tu izveidosi savus pirmos meklēšanas algoritmus, lai atrastu svarīgus spēles elementus spēlētāja inventārā, un sapratīsi, kāpēc datu kārtošana ir kritiska ātrdarbībai.
SR 2.4.19. (Gatavi algoritmi tipveida uzdevumu risināšanai - meklēšana)Pirms rakstām kodu, izveidosim pareizu struktūru mūsu jaunajai tēmai.
mkdir Tema7_Algoritmi
cd Tema7_Algoritmi
ni mekle_skaitli.py
code .
Sāksim ar lineāro meklēšanu. Tavs uzdevums ir izveidot funkciju, kas pārbauda spēlētāja inventāru.
mekle_skaitli.py izveido sarakstu ar nejaušiem priekšmetu ID numuriem.linear_search(saraksts, mekletais).for ciklu un enumerate(), lai ietu cauri sarakstam un atgrieztu indeksa numuru, kur priekšmets atrasts.-1.
def linear_search(inventars, meklejama_atslega):
for indekss, prieksmets in enumerate(inventars):
if prieksmets == meklejama_atslega:
return indekss
return -1
speletaja_inventars = [45, 12, 89, 3, 99, 21]
atraduma_vieta = linear_search(speletaja_inventars, 99)
print(f"Slepenā atslēga atrasta slotā: {atraduma_vieta}")
Lai izmantotu bināro meklēšanu, dati ir jāsakārto. Sagatavosim datus un simulēsim bināro meklēšanu.
nesakartoti_dati = [42, 15, 8, 99, 23, 4, 16, 81, 100, 5, 1, 33, 50, 60, 11].sorted(), lai izveidotu jaunu, sakārtotu sarakstu un to izdrukātu.""" ... """), kurā apraksti soļus, kā Tu, izmantojot binārās meklēšanas loģiku, atrastu skaitli 42 šajā sakārtotajā sarakstā.
nesakartoti_dati = [42, 15, 8, 99, 23, 4, 16, 81, 100, 5, 1, 33, 50, 60, 11]
sakartoti_dati = sorted(nesakartoti_dati)
print(f"Sakārtots inventārs: {sakartoti_dati}")
"""
Binārās meklēšanas simulācija skaitlim 42:
Saraksts: [1, 4, 5, 8, 11, 15, 16, 23, 33, 42, 50, 60, 81, 99, 100]
1. solis: Vidējais elements ir 23. 42 ir lielāks, atmetam kreiso pusi un 23.
2. solis: Jauns diapazons [33, 42, 50, 60, 81, 99, 100]. Vidējais ir 60. 42 ir mazāks, atmetam labo pusi.
3. solis: Jauns diapazons [33, 42, 50]. Vidējais ir 42. Atrasts! Pārbaudes prasīja 3 soļus.
"""
Cik lēna patiesībā ir lineārā meklēšana? Pārbaudīsim to ar miljonu ierakstiem!
import time.range() un list(), lai izveidotu sarakstu lieli_dati ar 1 000 000 secīgiem skaitļiem.linear_search funkciju.
import time
# Izveidojam milzīgu inventāru
lieli_dati = list(range(1000000))
# Mērām laiku
sakuma_laiks = time.time()
rezultats = linear_search(lieli_dati, 999999)
beigu_laiks = time.time()
pateretais_laiks = beigu_laiks - sakuma_laiks
print(f"Skaitlis atrasts indeksā: {rezultats}")
print(f"Lineārā meklēšana aizņēma: {pateretais_laiks:.5f} sekundes")