Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
4 основи програмування книга.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.77 Mб
Скачать

10.7.* Метод цифрового сортування

Іноді при розв’язані задачі типу задачі сортування можна використовувати особливості типу даних, що перетворюються, для отримання ефективного алгоритму. Розглянемо одну з таких задач – задачу про обернення підстановки.

Підстановкою множини 1..n назвемо двомірний масив A[1..2, 1..n] виду

1

2

..........

n-1

n

j1

j2

...........

j n-1

j n

в якому 2-ий рядок містить всі елементи відрізка 1. .n. Підстановка B називається оберненою до підстановки A, якщо B отримується з A сортуванням стовпців A у порядку зростання елементів 2-ого рядка з наступною перестановкою рядків. Треба побудувати алгоритм обчислення оберненої підстановки. З визначення випливає, що стовпець [i, ji] підстановки A треба перетворити в стовпець [ji , i] і поставити на ji-те місце в підстановці B.

{

Type

NumSet = 1..n;

Substitution = array[ 1..2, NumSet] of NumSet;

}

Procedure Reverse ( Var A, B : Substitution);

Begin

For i := 1 to n do begin

B[A[2, i], 2] := i;

B[A[2, i], 1] := A[2, i]

end

End;

Складність процедури Reverse лінійна, оскільки тіло арифметичного циклу складається з двох операторів присвоювання. Між тим стовпці підстановки відсортовані.

Аналогічна ідея використовується в так званому сортуванні вичерпуванням (або цифровому сортуванні), що застосовується для сортування послідовностей слів (багаторозрядних чисел). Для кожної букви алфавіту алгоритм створює структуру даних “черпак”, в яку пересилаються слова, що починаються на цю букву. В результаті перегляду послідовність виявляється відсортованою по першій букві. Далі алгоритм застосовують рекурсивно до кожного “черпака”, сортуючи його по наступним буквах.

10.8. Задачі і вправи

1.Дано масив А[1..900] of 1..999. Знайти трьохзначне число, що не знаходиться у цьому масиві. Розглянути два варіанта задачі:

а) Допоміжні масиви в алгоритмі не використовуються;

б) Використання допоміжних масивів дозволено.

2.Реалізувати алгоритм TreeSort, застосувавши метод вкладення дерева в масив. Для цього використати допоміжний масив В.

3.Реалізувати ітеративну версію алгоритму HeapSort:

а)Замінити рекурсію в процедурі SortTree арифметичним циклом For...downto, що оброблює дерево за рівнями, починаючи з нижнього;

б)Замінити рекурсію в процедурі Conflict ітераційним циклом, керуючим змінною i. { i := 2i або i := 2i + 1 }.

4.Реалізувати ітеративну версію алгоритму процедури HoareSeach, замінивши рекурсію ітераційним циклом.

5-6. Застосувати для розв’язку задач 1-2 параграфа 8 ідею Хоара.

7.Реалізувати алгоритм “тернарного” пошуку елемента в упорядкованому масиві, поділяючи ділянку пошуку на 3 приблизно рівні частини. Оцінити складність алгоритму у термінах С (n). Порівняти ефективності бінарного і тернарного пошуку.

8.Реалізувати алгоритм пошуку максимального і мінімального елементів у масиві (процедура MaxMin) для довільного n.

9.Нехай A[1..n] - масив цілих чисел, упорядкований за зростанням (A[i] < A[i+1]). Реалізувати алгоритм пошуку такого номера і, що A[i]= і методом “розділяй і володій”. Оцінити складність алгоритму.

10-12. Застосувати для розв’язку задач 3-5 параграфа 8 метод “розділяй і володій”.

13.Реалізувати алгоритм процедури Reverse “на місці”, формуючи обернену підстановку в масиві А.

Задачі обчислювальної геометрії.

  1. Дано набір з n точок площини, заданих координатами A1(X1, Y1), A2(X2, Y2) , ..., An(Xn, Yn). Знайти таку точку S(X, Y) на площині, сума відстаней від якої до даних точок набору найменша. Проілюструвати розв’язок на малюнку.

  2. Дано набір з n точок площини, заданих координатами: A1(X1, Y1), A2(X2, Y2), ..., An(Xn, Yn). Вибрати з цього набору точки, що знаходяться в вершинах випуклого багатокутника найменшої площини і який містить всі точки набору. Проілюструвати розв’язок на малюнку.

  3. Дано набір з n точок площини, заданих координатами: A1(X1, Y1), A2(X2, Y2), ..., An(Xn, Yn). Побудувати коло найменшого діаметра, який містить всі точки набору. Проілюструвати розв’язок на малюнку.

  4. Дано набір з n точок площини, заданих координатами: A1(X1, Y1), A2(X2, Y2), ..., An(Xn, Yn). Побудувати прямокутник найменшої площини, який містить всі точки набору. Проілюструвати розв’язок на малюнку.

  5. Випуклий n-кутник заданий набором вершин

A1(X1, Y1), A2(X2, Y2), ..., An(Xn, Yn).

Розбиття цього багатокутника на трикутники діагоналями, що не перетинаються називається тріангуляція. Вартістю тріангуляції називається сума довжин діагоналей розбиття. Знайти тріангуляцію багатокутника найменшої вартості. Проілюструвати розв’язок на малюнку.