Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
alg_wpor.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
391.77 Кб
Скачать

6. Орын ауыстырумен сұрыптау алгоритмімен шешілетін есепке сипаттама беріңіз. Алгоритмді қолданып жалпылама мысал келтіріңіз.

Қосулармен сұрыптау (Insertion Sort) – бұл сұрыптаудың қарапайым алгоритмі. Оның жұмыс жасау принципі алгоритмның әр қадамында массивтің бір злементін алып, керекті позициясын тауып орнына қойып отырамыз. Айта кететін жайт 1 элементтен тұратын массив сұрыпталған болып саналады. Есептеу қиындығы: O(n²). Артықшылығы:

- аз мөлшердегі мәліметтер жиынтығы үшін тиімді,10 элементке дейін мәліметтер жиынтығын есептеу онай;

- жартылай сұрыпталған мәліметтер жиынтығы үшін тиімді;

-бұл бекем сұрыптау алгоритмі (сұрыпталған элеметтер ретін өзгертпейді);

-алған тізімді сұрыптай алады;

- стекті қоса уақытша жадыны O(1) қолданады;

-бинарлы іздеудің арқасында жылдам жұмыс жасауы мүмкін.

Кемшіліктері: O(n²) алгоритмінің өте үлкен есептеу қиындығы.

Сипаттамасы . Алгоритмнің әр қадамында біз кіріс мәліметтерінің 1 элементтін таңдап, оны сұрыпталған түрде керекті позицияға кіріс мәліметтер жинытығы толғанға дейін қоямыз. Кезекті элементті алғашқы массивтен таңдау әдісі ерікті. Кез-келген таңдау алгоритмі қолданылуы мүмкін. Әдетте (тұрақты сұрыптау алгоритмін алу мақсатында), кіріс массивіне қойылған сәттен бастап элементтер ретімен қойылады. Төменде көрсетілген алгоритм дәл осы стратегияны қолданады.

Псевдокод

Кіріс: A[0], A[1], A[2], ..., A[n] элементтерден тұратын A массиві,

for i = 1, 2, 3, ..., n:

curr := A[i]

prevKey := i - 1

while prevKey >= 0 and A[prevKey] > curr:

A[prevKey+1] := A[prevKey]

A[prevKey] := curr

prevKey := prevKey-1

7. Lzw алгоритмімен шешілетін есепке сипаттама беріңіз. Алгоритмді қолданып жалпылама мысал келтіріңіз.

LZW алгоритмі арқылы шешілетін есепті сипаттаңыз. Берілген алгоритмді жалпылама түрде қолдану мысалын көрсетіңіз.

LZW – А.Лемпел құрастырған мәлімет ысырапсыз қысу алгоритмі.

Алгоритм

  1. Сөздікті барлық мүмкін болатын бір символды тізбекпен инициализациялау. W кіріс тізбегін хабарламаның бірінші символымен инициализациялау.

  2. Сөздіктен соңғы қабылданған символдармен сәйкес келетін ең ұзын W жолын табу.

  3. Кодталған хабарламадан кезекті K символын санау.

  4. Егер ХАБАРЛАМАНЫҢ_СОҢЫ болса, онда W үшін кодты беру, олай болмаған жағдайда

  5. Егер WK тізбегі сөздікте болса, W кіріс тізбегіне WK-ның мәнін меншіктеу және 3-ші қадамға өту, олай болмаған жағдайда W кодын беру, WK тізбегін сөздікке қосу, W кіріс тізбегіне K-ның мәнін меншіктеу және 3-ші қадамға өту.

  6. Соңы

«abacabadabacabae» тізбегін қысайық.

1-ші қадам. Жоғарыдағы алгоритмге сәйкес, бастапқы бос жолға “а”-ны қосамыз, “а” жолы кесте бар жоғын тексереміз. Инициализация кезінде кестеге барлық бір символдан тұратын жолдарды қостық, яғни “а” тізбегі кестеде бар.

2-ші қадам. Кіріс ағынынан келесі «b» символын оқимыз, “ab” жолы бар жоғын тексереміз. Ондай жол кестеде жоқ.

<5>-ші кестеге “ab”-ны қосамыз. Ағынға: <0>;

3-ші қадам. “ba” – жоқ. <6>-ші кестеге “ba”-ны қосамыз. Ағынға: <1>;

4-ші қадам. “ac” – жоқ. <7>-ші кестеге “ac”-ны қосамыз. Ағынға: <0>;

5-ші қадам. “ca” – жоқ. <8>-ші кестеге “ca”-ны қосамыз. Ағынға: <2>;

6-шы қадам. “ab” – кестеде бар; “aba” – жоқ. <9>-шы кестеге “aba”-ны қосамыз. Ағынға: <5>;

7-ші қадам. “ad” – жоқ. <10>-шы кестеге “ad”-ны қосамыз. Ағынға: <0>;

8-ші қадам. “da” – жоқ. <11>-ші кестеге “da”-ны қосамыз. Ағынға: <3>;

9-шы қадам. “aba” – кестеде бар; “abac” – жоқ. <12>-ші кестеге “abac”-ты қосамыз. Ағынға: <9>;

10-шы қадам. “ca” – кестеде бар; “cab” – жоқ. <13>-ші кестеге “cab”-ты қосамыз. Ағынға: <8>;

11-ші қадам. “ba” – кестеде бар; “bae” – жоқ. <14>-ші кестеге “bae”-ны қосамыз. Ағынға: <6>;

12-ші қадам. Соңғы “e” жолы, оның артынан хабарламаның соңы жүреді, сол себепті біз оны <4>-ші ағынға қосамыз.

11 битке қысқа «0 1 0 2 5 0 3 9 8 6 4» кодталған хабарламаны аламыз.

8. Жылдам сұрыптау алгоритмімен шешілетін есепке сипаттама беріңіз. Алгоритмді қолданып жалпылама мысал келтіріңіз.

Тез сұрыптау (Быстрая сортировка; quicksort) — мәліметтерді тез сұрыптауға мүмкіндік беретін алгоритм, атап айтқанда, сандық мәліметтерді өсу реті бойынша немесе мәтіндік мәліметтерді алфавит ретімен орналастыру. Алгоритм тізіммен берілген әрекетті орындайды және тізімнің әр жерінде орналасқан мәліметтерді салыстырады. Бірнеше жүз элементген тұратын айтарлыктай үлкен тізімдер үшін қолданылады.

Работает для произвольного массива из n целых чисел

int n, a[n]; //n - количество элементов

void qs(int* s_arr, int first, int last)

{

int i = first, j = last, x = s_arr[(first + last) / 2];

do {

while (s_arr[i] < x) i++;

while (s_arr[j] > x) j--;

if(i <= j) {

if (i < j) swap(s_arr[i], s_arr[j]);

i++;

j--;

}

} while (i <= j);

if (i < last)

qs(s_arr, i, last);

if (first < j)

qs(s_arr, first,j);

}

Исходный вызов функции qs для массива из n элементов будет иметь следующий вид.

qs(a, 0, n-1);

Жылдам сұрыптау «бөл және биле» стратегиясын қолданады.

  1. Массивтен тірек элементі болатын кез келген элементті аламыз. Алгоритмнің тиімділігін жоғарылату үшін медианасы таңдалу қажет. Бірақ алгоритмнің дұрыстығы жағынан тірек элемент ретінде кез келгенін таңдауға болады.

  2. Массивті бөлу алгоритмі. Массивте таңдалып алынған тірек элементке тең және одан кіші элементтер сол жағында, ал тірек элементтен үлкен элементер оң жағында болатындай етіп қайта ұйымдастырамыз.

  3. Тірек элементтің екі жағында жатқан қосымша массивтерді рекурсивті реттейміз.

  4. Базалық рекурсия бір немесе екі элементтен тұратын жинақ болып табылады. Біріншісі бұрынғы қалпына келеді, ал екіншісінде сұрыптау екі элементтің орын ауыстыруына әкеледі. Мұндай бөліктер бөлу процесінде реттелген.

Массивтің өңделіп жатқан бөлігі әр итерацияда (рекурсияның келесі әр деңгейінде) кем дегенде бірге азаяды, сондықтан өңделу кепілді түрде аяқталады.

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