2.Ketma-ket qidiruv va indeksli ketma-ket qidiruvlarning qaysi biri samaraliroq va nima sababdan?
Мазкур кўринишдаги қидирув агар маълумотлар тартибсиз ёки улар тузилиши ноаниқ бўлганда қўлланилади. Бунда маълумотлар бутун жадвал бўйича оператив хотирада кичик адресдан бошлаб, то катта адресгача кетма-кет қараб чиқилади.
Массивда кетма-кет қидирув (search ўзгарувчи топилган элемент рақамини сақлайди).
Algoritm quyidagicha
Kiritish massiv a va key
For i=0,1,…,n
if (a[i]==key) operatorlar; chiqish;
For ni yopish
Tugatish
Массивда кетма-кет қидирув алгоритми самарадорлигини бажарилган таққослашлар сони М билан аниқлаш мумкин. Мmin = 1, Mmax = n. Агар маълумотлар массив ячейкасида бир ҳил эхтимоллик билан тақсимланган бўлса, у ҳолда Мср » (n + 1)/2 бўлади.
Агар керакли элемент жадвалда бўлмаса ва мазкур элементни жадвалга қўшиш лозим бўлса, у ҳолда юқоридаги дастурдаги охирги иккита оператор қуйидагига алмаштирилади.
Агар маълумотлар жадвали бир боғламли рўйхат кўринишида берилган бўлса, у ҳолда кетма-кет қидирув рўйхатда амалга оширилади.
Рўйхатли тузилманинг афзаллиги шундан иборатки, рўйхатга элементни қўшиш ёки ўчириш тез амалга ошади, бунда қўшиш ёки ўчириш элемент сонига боғлиқ бўлмайди, массивда эса элементни қўшиш ёки ўчириш тахминан барча элементларни яримини силжитишни талаб қилади. Рўйхатда қидирувни самарадорлиги тахминан массивники билан бир ҳил бўлади.
Умуман олганда кетма-кет қидирув самарадорлигини ошириш мумкин.
Фараз қилайлик, кун давомида маълумотлар йиғилиб, кечқурун улар қайта ишлансин. Маълумотлар тўплангандан кейин улар сараланади
Фараз қилайлик, ўсиш тартибида тартибланган сонлар массиви берилган бўлсин. Ушбу усулни асосий ғояси шундан иборатки, тасодифий қандайдир AM элемент олинади ва у Х қидирув аргументи билан таққосланади. АгарAM=Х бўлса, у ҳолда қидирув якунланади; агар AM M >X бўлса.
М ихтиёрий танланганда ҳам таклиф қилинаётган алгоритм коррект ишлайди. Шу сабабали М ни шундай танлаш лозимки, тадқиқ қилинаётган алгоритм самаралироқ натижа берсин, яъни уни шундай танлайликки, иложи борича келгуси жараёнларда иштирок этувчи элементлар сони кам бўлсин. Агар биз ўртача элементни, яъни массив ўртасини танласак ечим мукаммал бўлади.
Қуйидаги чизма кўринишида берилган массивни қараб чиқайлик. Фараз қилайлик, биздан калити 52 га тенг бўлган элементни топиш талаб қилинсин. Дастлабки таққосланадиган элемент 49 бўлади. 49<52 бўлгани учун сабабли, кейинги қидирув 49 дан юқорида турган элементлар орасида амалга оширилади. Янги хосил бўлган массив ўртаси 86. Агар берилган калит билан ушбу калитни таққосласак 86>52 бўлади. Демак, навбатдаги қидирувлар 86 билан 49 орасидаги элементлар ичида амалга оширилиши лозим. Кейинги қадамда маълум бўлдики, қаралаётган элементлар ўртасидаги элемент калити 52 га тенг. Шундай қилиб, массивда берилган калитга тенг бўлган элементни топдик.
52>
Do'stlaringiz bilan baham: |