Համակարգիչներ, Ծրագրավորում
Երկուական որոնում մեկը ամենահեշտ ձեւերից է գտնել մի տարր է զանգված
Շատ հաճախ, ծրագրավորողներ, նույնիսկ սկսնակների, կանգնած է նրանով, որ կա մի շարք համարներ, որը պետք է գտնել մի կոնկրետ շարք: Դա այս հավաքածուն, որը կոչվում է զանգված. Եւ գտնել իրեր դրանից, կան մի անհամար ձեւերով: Սակայն առավել պարզ նրանցից կարելի է համարել որպես երկուական որոնումը աջ կողմում: Որն է այս մեթոդը. Եւ թե ինչպես պետք է իրականացնել երկուական որոնումը. Pascal է ամենահեշտ միջավայրը կազմակերպման համար նման մի ծրագրի, այնպես որ, մենք կօգտագործենք այն ուսումնասիրել.
Նախ, վերլուծել, թե ինչ են առավելությունները, այս մեթոդի, դա այդպես է, մենք կարող ենք հասկանալ,
Այնպես որ, թե ինչ է աշխատանքային սկզբունքը, այս մեթոդը. Անմիջապես պետք է ասեմ, որ երկուական որոնման աշխատում է ոչ թե որեւէ զանգված, բայց միայն մի տեսակավորված շարք թվերի: Յուրաքանչյուր քայլ ձեռնարկել միջին տարր զանգված (նկատի ունենալով համարը տարր): Եթե պահանջվող թիվն ավելի մեծ է, քան միջին, ապա այն ամենը, ինչ մնացել է, որ ավելի քիչ է, քան միջին խցում, կարող է անտեսվեցին, եւ ոչ թե նայում այնտեղ. Եվ հակառակը, եթե ավելի քիչ է, քան միջինը միջեւ այդ թվերի դեպի աջ, դուք չեք կարող որոնել. Ապա ընտրեք նոր որոնման տարածք, որտեղ առաջին տարրը կլինի միջին տարրը ողջ զանգված, իսկ վերջին, իսկ վերջինը կամքը: Միջին թվաքանակը նոր դաշտում կլինի քառորդ բոլոր հատվածի, այսինքն, (վերջին էլեմենտի + մեջտեղի տարր է ամբողջ զանգված) / 2: Կրկին, այդ նույն գործողությունը կատարվում, մի համեմատություն միջին թվով զանգված: Եթե թիրախ արժեքը պակաս է միջինը, մենք մերժում ենք աջ կողմում, ինչպես նաեւ անել, մինչեւ հիմա այդ մեջտեղի տարրը չէր ցանկալի.
Իհարկե, դա լավ է նայում մի օրինակ, թե ինչպես պետք է գրել երկուական որոնումը: Pascal Մականուն կլինի արժեքներ մեկին տարբերակը կարեւոր չէ: Եկեք գրել մի պարզ ծրագիր:
Դա մի զանգված 1-ից h անվան տակ «massiv», փոփոխական նշելով, ստորին սահմանը որոնման, որը կոչվում է «Niz», վերին սահմանը, որը կոչվում է «Verh», իսկ միջին որոնման տերմին «sredn». եւ անհրաժեշտ թվով «isk»:
Այնպես որ, առաջին հերթին մենք հանձնարարել վերին եւ ստորին սահմանը Լեռնաշղթայի որոնման
Niz: = 1;
Verh: = h + 1;
Ապա կազմակերպում է ցիկլը », մինչեւ ներքեւի ավելի քիչ է, քան վերին սահմանաչափի":
Մինչ Niz
Յուրաքանչյուր քայլ, մենք բաժանենք հատվածի 2:
sredn: = (Niz + Verh) div 2; {Օգտագործեք ֆունկցիայի div, քանի որ բաժանման առանց մնացած}
Ամեն անգամ, երբ վերանայման. Քանի որ նյութը արդեն գտել, եթե միջին ցանկալի է, ընդհատել ցիկլը:
եթե sredn = isk հետո կոտրել.
Եթե միջին տարրը զանգվածի ավելի քան ցանկալի, մերժել է ձախ կողմը, այսինքն, վերին սահմանը միջինը նշանակելու տարր:
եթե զանգվածում [sredn]> isk ապա Verh: = sredn;
Եւ եթե ընդհակառակը, այն կազմում է ստորին սահմանը:
ուրիշ Niz: = sredn;
վերջ;
Որ այդ ամենը կլինի ծրագրի.
Տեսնենք, թե ինչպես դա կանդրադառնա երկուական մեթոդը գործնականում: Մտածեք այս զանգված: 1, 3, 5, 7, 10, 12, 18, եւ դա կլինի ձգտում համարը 12:
Ընդհանուր առմամբ, մենք ունենք 7 տարրեր, ուստի պիտի չորրորդ միջին, արժեքը 7:
| 1 | 3 | 5 | 7 | 10 | 12 | 18 |
Քանի որ ավելի քան 12, 7, 1.3 եւ 5 տարրերի, մենք կարող ենք մերժել: Ապա մենք ստացել թիվ 4, 4/2, ոչ մնացորդի 2. Այսպիսով, նոր տարր չի լինի միջինը 10:
| 7 | 10 | 12 | 18 |
Այստեղ է, որ միջին տարրը արդեն 12 է, այն է, որ անհրաժեշտ թվով: Այս խնդիրը ավարտվել համարը 12 found:
Similar articles
Trending Now