Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
О.О.П / ооп / 4_кол / К курсовой / Методи побудови алгоритмів та їх аналіз / Інформатика_1 (методи побудови алгоритмівта та їх аналіз).doc
Скачиваний:
88
Добавлен:
30.05.2020
Размер:
2.5 Mб
Скачать

Сортування підрахунком

Якщо наперед відомий проміжок зміни значень елементів масиву, що впорядковується, то виявляється, що зовсім немає потреби в цьому впорядкуванні. Потрібно лише під час читан-ня елементів вхідного масиву підраховувати кількість можли-вих значень елементів, що ввійшли в конкретний масив.

Саме умова належності значень елементів масиву, що впо-рядковується, наперед відомому проміжку і є обмеженням на використання даного алгоритму.

Для такого підрахунку слід передбачити існування масиву, кількість елементів у якому дорівнюватиме кількості можли-вих значень елементів заданого масиву, а індекси збігатимуть-ся з цими значениями.

197

Розглянемо приклад масиву шкільних балів, які можуть змінюватися в межах від 1 до 12. Зрозуміло, що в описаному підході до впорядкування такого масиву заносити його в па-м'ять комп'ютера немае потреби. Достатньо покроково зчиту-вати елементи вхідної послідовності в деяку змінну х і зразу ж аналізувати це значения. Для фіксації кількості тих чи інших балів у вхідній послідовності зарезервуємо масив а., де і = 1, 2, ..., 12. Якщо х - 9, то значения ад збільшимо на 1. Зрозу-міло, що на початку роботи з масивом а необхідно всі його значения обнулити. Після завершения читання вхідної інфор-мації в масиві а буде вся необхідна нам інформація. Значен­иям елемента at буде кількість балів зі значениям і. Зрештою залишиться тільки роздрукувати числа і стільки разів, яким є значения самого елемента а(.

Загальний вигляд алгоритму у вигляді тексту Pascal-програ-ми значень вхідного масиву в проміжку [k; 1] виглядатиме так:

a: array[k.. I] of <зчислений тип>;

for i := k to I do

a[i]:=0; for i := 1 to n do begin

read (x); inc(a[x]) end; for i := k to I do if a[i]<>0then

forj := 1 toa[i] do write(i, ''); writeln;

Зрозуміло, що пей метод можна застосувати для будь-якої за довжиною послідовності вхідних значень. Вони можуть бути розміщені на диску у вхідному файлі, і прямо із файла будемо вести читання елементів.

Зробимо одне зауваження. Ми недарма в якості типу елемен-тів масиву а записали «зчислений тип». Справа в тому, що для елементів вхідного масиву типу real масив для підрахунку йо­го елементів зарезервувати неможливо. Обґрунтуйте це твер-дження самостійно.

За традицією введемо оцінку ефективності роботи алгорит­му сортування масиву методом підрахунку. Для даного методу вона становить О(п).

Оскільки сортування підрахунком абсолютно не залежить від упорядкованості чи неупорядкованості вхідних даних, то в цьому можна пересвідчитися при тестуванні саме на таких вхідних даних:

198

  • вхідний масив уже впорядкований необхідним чином;

  • вхідний масив є частково впорядкованим;

  • вхідний масив упорядкований у зворотному порядку;

  • елементи вхідного масиву розміщені випадковим чином. При тестуванні різних вхідних даних, що впорядковуються

алгоритмом підрахунку, обов'язково треба врахувати те, що робота даного алгоритму не стільки чутлива до довжини цих вхідних даних, скільки до діапазону зміни їх значень. Тому не-обхідно згенерувати такі послідовності вхідних даних для л > 100, щоб діапазон зміни їх значень давав змогу використа-ти метод сортування підрахунком.

/ Запитання для самоконтролю

  1. Які фаю ори впливають на вибір тих чи інших методів сортування елементів масивів та на ефективність роботи цих алгоритмів?

  2. У чому полягає ідея сортування елементів масиву методом пщ­рахунку?

  3. Які обмеження накладаються на значения елементів масиву, що сортується методом пщрахунку?

  4. Чи є обмеження на кількість елементів масиву, який сортується методом пщрахунку?

  5. Чи є обмеження на тип елементів масиву, який може бути від-сортований методом пщрахунку?

  6. Запишіть алгоритм і текст Pascal-програми, що реалізує сорту­вання масиву методом пщрахунку.

  7. Якою є оцінка ефективності роботи алгоритму сортування маси­ву методом пщрахунку?

Завдання

  1. Реалізувати у вигляді програми алгоритм сортування за­дано'! послідовності за зростанням методом підрахунку.

  2. Модифікувати алгоритм, реалізований у завданні 1, так, щоб сортування відбувалося за спаданиям.

  3. Протестувати реалізовані в завданнях 1-2 алгоритми для масиву 15, 4, 10, 8, 6, 9, 16, 1, 7, 3, 11, 14, 2, 5, 12, 13.

  4. Проаналізувати покрокове виконання завдання 3 щодо кількості виконуваних дій.

  5. Підібрати власні тести, які доводять переваги й показу-ють недоліки методу сортування підрахунком при п > 100.

  6. Зробити письмовий аналіз завдань 3-5.

Соседние файлы в папке Методи побудови алгоритмів та їх аналіз