Logaritmikus, intervallumfelezéses keresés C++ -ban?
Hogy működik? Van értelme egyáltalán ezt használni?
int ujhatar = alsohatar+(felsohatar-alsohatar)/2; //Ez lesz az új határ, de nem tudjuk, hogy alsó vagy felső.
if (tomb[ujhatar]==keresettertek){
//Kész vagyunk! Ráhibáztunk!
cout << "Benne van! Megpedig a(z) " << ujhatar << ". helyen.";
benneVanE = true;
}
else if (tomb[ujhatar]<keresettertek){
alsohatar = ujhatar;
}
else{
felsohatar = ujhatar;
}
Ha föltesszük, hogy:
- neked kell implementálni
- csak kis elemszámra fog lefutni
Ekkor valóban semmi, de általában nem ez a helyzet, hanem:
- lehet akárhány elem, de legalábbis 100-szor, 1000-szer annyi, mint amennyivel teszteled
- csak választanod kell STL-ből, vagy más libraryból, hogy melyik függvényt használod
Tudni meg azért érdemes, mert teljesen alap dolog, nem is ragoznám.. (amúgy a bináris keresésnél meglepően könnyen lehet off-by-one errorba futni, ne lepődj meg, ha esetleg te is elkövetnéd.. vagy esetleg más hibát)
Ha tanulsz, akkor felejtsd el az STL-t és csináld meg saját kútfőből. Ha másért nem:
1. Hogy tudd.
2. Akadhat olyan helyzet, amikor STL nem lesz, vagy ha lenne is, azt nem használhatod.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!