Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2_program_A_1.doc
Скачиваний:
30
Добавлен:
08.03.2016
Размер:
206.34 Кб
Скачать

2. Іздеу алгоритмдерінің типтері және бейнеленуі. Мысал келтіріңіз.

Іздеу деп берілген жиында берілетін эталон шаблонның қасиеттеріне ие объектіні табуды атайды. Көп жағдайда жиын массив түрінде анықталады.

Сызықтық іздеу – қажетті элементті массив элементтерін қарапайым бірінен кейін бірін эталонмен салыстыра отырып іздейтін процедура.

Кедергімен сызықтық іздеу – бұл ізделінді элемент массивтің шекаралық a[n+1] элементі болып қосымша енгізіліп, және іздеу үрдісінде a[i]=x болатындай i табылатын іздеу. Ал егер a[i]=x тек қана i=n+1 болса, онда массивте ізделінді элемент жоқ. Көп жағдайда іздеу реттелген массивте жүргізілген тиімді. Бұл жағдайларда тиімді әдістердің бірі – қақ бөлу бойынша іздеу. Қақ бөліп іздеу әдісінде ізделінді эталонды салыстыру массивтің ортасында орналасқан элементпен жүргізіледі, салыстыру нәтижесіне байланысты (артық немесе кем) ары қарай іздеу массивтің не сол жақ жартысында, не оң жақ жартысында жүргізіледі.

Іздеу есептерінде берілген шартқа сәйкес келетін элементті іздеп табу керек. Ол үшін жиым элементтерін біртіндеп тізбектей қарастырып отырып шартты тексеріп шығу керек. Осылай ету барысында циклден шығудың екі жолы бар:

  • Керекті элемент табылғаннан кейін;

  • Жиым элементтері тегіс қаралып шықты, керекті элемент табылмады.

1-есеп. Берілген к санына тең жиымның алғашқы элементін табу.

Int k;

Printf(“\nK=”);

Scanf(“%i“,&k);

Int ok=0; //элемент табылғаны/табылмағаны белгісі

Int I, nom;

For(i=0;i<n;i++)

If(a[i]==k) {ok=1;nom=i;break;}

If(ok==1) printf(“\nnom=”, nom);

Else printf(“\nk-ға тең элемент жоқ!”);

3. Сұрыптау алгоритмдерінің түрлері және бейнеленуі. Мысал келтіріңіз.

Сұрыптау - берілген обьектілер жиынын ұсынылған реттілікпен қайта теріп орналастыру процесі. Сұрыптаудың мақсаты – сұрыпталған тізбекте қажетті элементтерді іздестіруді жеңілдету. Сұрыптау алгоритмдері мәліметтер құрылымын таңдауға тәуелді, сондықтан сұрыптау әдістерін екі түрге бөледі: ішкі сұрыптау алгоритмдері(массивтерді сұрыптау) және сыртқы сұрыптау алгоритмдері(файлдарды сұрыптау).

Ішкі сұрыптаулар алгоритмдері – бұл ішкі жадтағы мәліметтерді сұрыптау алгоритмдері, бұл жағдайда қолайлы құрылым – массив. Қарапайым сұрыптау алгоритмдері: кірулермен сұрыптау, таңдаумен сұрыптау, алмасумен сұрыптау («көбікше» әдісі). Сұрыптаудың жетілдірілген қарапайым әдістері: кемімелі өсімшелі кіру бойынша сұрыптау (Шелл сұрыптауы), ағаш көмегімен сұрыптау (пирамидалық сұрыптау), бөліктеу арқылы сұрыптау (жылдам сұрыптау).

Кірулермен сұрыптау – элементтер шартты түрде дайын тізбекке a1,…, ai-1 және кіретін тізбекке ai,…, an бөлінеді, содан кейін әрбір қадамда, i=2 бастап және i-ді бірлікке арттыра отырып, кіретін тізбектің i-ші элементін алып дайын тізбектің тиісті орнына кіргізе береді.

Керекті орынды іздеу кезінде оң жақтағы келесі элементпен орын ауыстыру қарастырылады, яғни таңдалып алынған элемент сұрыпталғандардың J=I-1 нөмірінен басталатын кезекті элементімен салыстырылады. Егер таңдалып алынған элемент a[I]-ден артық болса, онда ол сұрыпталғандар ішіне қосылады, әйтпесе a[J] бір орынға ығысады да, таңдалған элемент сұрыпталғандар ішіндегі келесі элементпен салыстырылады. Керекті орынды іздеу әрекеті екі жағдайда:

  • Егер a[I]> a[J] болатын элемент табылса;

  • Дайын тізбектің сол жақ шетіне жеткен кезде аяқталады.

Мысалы:

int i,j,x;

For(i=1;i<n;i++)

{x=a[i]; //ауысатын элементті есте сақтау

J=i-1;

While(x<a[j]&&j>=0) // керекті орынды іздеу

{a[j+1]=a[j]; // оңға жылжыту

j--; }

A[j+1]=x; //элементті кірістіріп қою }

Таңдаумен сұрыптау – ең кіші элемент таңдалады, содан кейін ол бірінші a1 элементімен орын ауыстырылады. Қалған элементтермен де осы тәсіл қайталанады.

int I, min, n_min,j;

for(int i=0;i<n-1;i++)

{ min=a[i]; n_min=i; //минимумды іздеу

for(j=i+1;j<n; j++)

if(a[j]< min)

{ min=a[j]; n_min=j; }

a[n_min]=a[i]; /алмастыру

a[i]=min; }

Алмасумен сұрыптау – барлық элементтер қажетінше сұрыпталғанша көрші элементтер өзара салыстырылып және орын ауыстырылады. Осындай әрекет нәтижесінде ең кіші элемент жиымның ең сол жақ шетіне ығысады.

For(int i=1;i<n;i++)

For(int j=n-1;j>=I;j--)

If(a[j]<a[j-1])

{int r=a[j]; a[j]=a[j-1];a[j-1]=r;}

Жиымдарды сұрыптау жылдамдығы әр түрлі болады. Қарапайым сұрыптау тәсілдері n*n рет салыстыруды керек етеді, мұндағы n- жиым элементтері саны; ал жылдам сұрыптау тәсілі n*ln(n) рет салыстыруды қажет етеді. Қарапайым тәсілдер түсінуге жеңіл, өйткені алгоритмі түсінікті. Күрделі тәсілдер аз әрекеттер санын керек еткенмен, операциялары күрделірек болады, сондықтан элементтер саны аз жиымдарға қарапайым тәсілдерді қолданған дұрыс.

Сыртқы сұрыптау алгоритмдері – бұл сыртқы жадтағы мәліметтерді сұрыптау алгоритмдері, мұнда қолайлы құрылым - файл. Негізгі ерекшелігі - өңдеудің әрбір уақыт мезетінде тек бір ғана элементі жетімді. Файлдарды сұрыптау әдістерінің көпшілігі тоғыстыру процедурасына негізделеді. Тоғыстыру – екі (немесе одан да көп) тізбектерді бір тізбекке біріктіру, ол тізбек элементтері қайталанатын таңдау арқылы реттелген. Қарапайым тоғыстыру келесі қадамдардан тұрады:

1. a тізбегі b және c екі жартыға бөлінеді;

2. b және c тізбектері жеке элементтерді реттелген жұптарға біріктіру арқылы тоғыстырылады;

3. Алынған тізбек a деп аталады, содан кейін 1 және 2 қадамдар қайталанады; бұл жолы реттелген жұптар реттелген төрттіктерге тоғыстырылады;

4. Алдыңғы қадамдар қайталанады; төрттіктер сегіздіктерге тоғыстырылады, барлық үрдіс бүкіл тізбек реттелгенше жалғасады; тоғыстырылатын жарты тізбектер ұзындықтары екі еселеніп отырады.

Табиғи тоғыстыру – бұл әр тоғыстыруда мүмкін ең ұзын ішкі тізбектер біріктірілетін тоғыстыру.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]