Реферат по предмету "Информатика, программирование"


Програма для сортування даних методом піраміди

Міністерство освіти та науки України
Кіровоградський Державний Технічний університет
Кафедра програмного забезпечення
 
 
 
 
 
 
 
Курсовий проект
з дисципліни
“Програмування на мові ASM-86"
на тему:
“Програма для сортування даних методом піраміди ”

Зміст
1. Вступ
2. Постановка задачі
3. Обгрунтування вибору методів розв’язку задачі
4. Алгоритм програми
5. Реалізація програми
6. Системні вимоги
7. Інструкція для користувача
Висновки
Використана література
Додаток
1. Вступ
В наш час нові інформаційні технологіїпосідають дуже важливе місце не лише в спеціалізованих, але й в повсякденнихсферах життя. Комп’ютери застосовуються в бізнесі, менеджменті, торгівлі,навчанні та багатьох інших сферах діяльності людини.
Комп’ютерні технології дуже зручні длявиконання різноманітних операцій, але в різних сферах застосування ці операціїрізні. Тому, кожна окрема галузь, яка використовує специфічні технічні засоби,потребує своїх власних програм, які забезпечують роботу комп’ютерів.
Розробкою програмного забезпечення займаєтьсятака галузь науки, як програмування. Вона набуває все більшого й більшогозначення останнім часом, адже з кожним днем комп’ютер стає все більшнеобхідним, все більш повсякденним явищем нашого життя. Адже обчислювальнатехніка минулих років вже майже повністю вичерпала себе і не задовольняє тимпотребам, що постають перед людством.
Таким чином, нові інформаційні технології дужеактуальні в наш час і потребують багато уваги для подальшої розробки тавдосконалення. Поряд з цим, велике значення має також і програмування, яке єодним із фундаментальних розділів інформатики і тому не може залишатись осторонь.
Програмування містить цілу низку важливихвнутрішніх задач. Однією з найбільш важливих таких задач для програмування єзадача сортування. Під сортуванням звичайно розуміють перестановки елементівбудь-якої послідовності у визначеному порядку. Ця задача є однією знайважливіших тому, що її метою є полегшення подальшої обробки певних даних і,насамперед, задачі пошуку. Так, одним з ефективних алгоритмів пошуку є бінарнийпошук. Він працює швидше ніж, наприклад, лінійний пошук, але його можливозастосовувати лише за умови, що послідовність вже упорядкована, тобтовідсортована.
Взагалі, відомо, що в будь-якій сферідіяльності, що використовує комп’ютер для запису, обробки та збереженняінформації, усі дані зберігаються в базах даних, які також потребують сортування.Певна впорядкованість для них дуже важлива, адже користувачеві набагато легшепрацювати з даними, що мають певний порядок. Так, можна розташувати всі товарипо назві або відомості про співробітників чи студентів за прізвищем або рокомнародження, тощо.
Задача сортування в програмуванні не вирішенаповністю. Адже, хоча й існує велика кількість алгоритмів сортування, все ж такиметою програмування є не лише розробка алгоритмів сортування елементів, але йрозробка саме ефективних алгоритмів сортування. Ми знаємо, що одну й ту самузадачу можна вирішити за допомогою різних алгоритмів і кожен раз змінаалгоритму приводить до нових, більш або менш ефективних розв’язків задачі. Основнимивимогами до ефективності алгоритмів сортування є перш за все ефективність зачасом та економне використання пам’яті. Згідно цих вимог, прості алгоритмисортування (такі, як сортування вибором і сортування включенням) не є дужеефективними.
Алгоритм сортування обмінами, хоча і завершуєсвою роботу (оскільки він використовує лише цикли з параметром і в тілі циклівпараметри примусово не змінюються) і не використовує допоміжної пам’яті, алезаймає багато часу. Навіть, якщо внутрішній цикл не містить жодноїперестановки, то дії будуть повторюватись до тих пір, поки не завершитьсязовнішній цикл.
Алгоритм сортування вибором ефективнішесортування обмінами за критерієм М (n), тобто за кількістю пересилань, алетакож є не дуже ефективним. З цих причин було розроблено деякі нові алгоритмисортування, що отримали назву швидких алгоритмів сортування. Це такі алгоритми,як сортування деревом, пірамідальне сортування, швидке сортування Хоара таметод цифрового сортування.
2. Постановка задачі
Необхідно розробити програму, в якійреалізувати алгоритм сортування методом піраміди. Ця програма будезастосовуватись для сортування числових даних у файлі.
 3. Обгрунтування вибору методіврозв’язку задачі
Алгоритм пірамідального сортування HeapSortвикористовує представлення масиву у виді дерева. Цей алгоритм не вимагаєдопоміжних масивів, сортуючи “на місці". Розглянемо спочатку методпредставлення масиву у виді дерева:
Нехай A [1. n] — деякий масив. Зіставимо йомудерево, використовуючи наступні правила:
/>

1. A [1] — корінь дерева;
2. Якщо A [i] — вузол дерева і 2i £ n,
то A [2*i] — вузол — “лівий син" вузла A[i]
3. Якщо A [i] — вузол дерева і 2i + 1 £ n,
то A [2*i+1] — вузол — “правий син" вузлаA [i]
Правила 1-3 визначають у масиві структурудерева, причому глибина дерева не перевершує [log2 n] + 1. Вони жзадають спосіб руху по дереву від кореня до листків. Рух вгору задаєтьсяправилом 4:
4. Якщо A [i] — вузол дерева і i > 1, то A [imod 2] — вузол — “батько" вузла A [i] ;
Приклад: Нехай
A = [45 13 24 31 11 28 49 40 19 27]
— масив. Відповідне йому дерево має вид:
/>

Зверніть увагу на те, що всі рівні дерева, завинятком останнього, цілком заповнені, останній рівень заповнений ліворуч ііндексація елементів масиву здійснюється вниз і праворуч. Тому деревоупорядкованого масиву відповідає наступним властивостям:
A [i] (A [2*i], A [i] (A [2*i+1], A [2*i] (A [2*i+1].
Як це не дивно, алгоритм HeapSort спочаткубудує дерево, що відповідає прямо протилежним співвідношенням:
A [i] ³ A [2*i], A [i] ³ A [2*i+1]
а потім змінює місцями A [1] (найбільшийелемент) і A [n].
Як і TreeSort, алгоритм HeapSort працює в дваетапи:
I. Побудова сортуючого дерева;
II. Просівання елементів по сортуючому дереву.
Дерево, що представляє масив, називаєтьсясортуючим, якщо виконуються умови (6). Якщо для деякого i ця умова невиконується, будемо говорити, що має місце (сімейний) конфлікт у трикутнику i.
Як на I-ом, так і на II-ому етапах елементарнадія алгоритму полягає в вирішенні сімейного конфлікту: якщо найбільший із синівбільше, ніж батько, то переставляються батько і цей син (процедура ConSwap).
У результаті перестановки може виникнути новийконфлікт у тому трикутнику, куди переставлений батько. У такий спосіб можнаговорити про конфлікт (роду) у піддереві з коренем у вершині i. Конфлікт родувирішується послідовним вирішенням сімейних конфліктів проходом по дереву вниз.(На мал шлях вирішення конфлікту роду у вершині 2 відзначений). Конфлікт родувирішено, якщо прохід закінчився (i > n div 2), або ж в результатіперестановки не виник новий сімейний конфлікт.
I етап — побудова сортуючого дерева — оформимоу виді рекурсивної процедури, використовуючи визначення:
Якщо ліве і праве піддерева T (2i) і T (2i+1) дереваT (i) є сортуючими, то для перебудови T (i) необхідно вирішити конфлікт роду вцьому дереві.
На II-ом етапі — етапі просівання — для k відn до 2 повторюються наступні дії:
1. Переставити A [1] і A [k] ;
2. Побудувати сортуюче дерево початковоговідрізка масиву A [1. k-1], усунувши конфлікт роду в корені A [1]. Відзначимо,що 2-а дія вимагає введення в процедуру Conflict параметра k.
Нескладно підрахувати, що
С(n) = O (n log2 n), М(n)= O (n log2 n)
4. Алгоритм програми
Записи R1. Rn вміщені в масиві. Сортуванняздійснюється за таким спільним алгоритмом:
1. Встановити l= [N/2] +1, r=n
2. Якщо l>1, то зменшити його на 1, R=R1. (Якщоl=1, це означає, що процес сортування завершено). Інакше встановити R=Rr, Rr=R1,r=r-1. Якщо r=1, то встановити R1=R і завершити роботу.
3. Приготуватися до перестановок (j=l)
4. Встановити i=j та j=j*2. Якщо j
5. Якщо Kj>Kj+1, то j=j+1
6. Якщо К>Кj, то перейти до п.8.
7. Ri=Rj, перейти до п.4.
8. Ri=R, повернутися до п.2.
 5. Реалізація програми
Після запуску програма зчитує з вхідного файлабайти для сортування. Після цього викликається процедура sort_start, яказапускає процес сортування. При сортуванні використовується рекурсивний алгоритмвиклику функцій sorttree, conflict та conswap. При сортуванні інформаціязаписується в потрібне місце масиву згідно описаного вище алгоритму.
Після закінчення сортування програма створює вихіднийфайл і записує в нього відсортований масив.
 6. Системні вимоги
Операційна системаDOS
CPUINTEL 8086 або ст.
RAM640 K
VIDEOCGA або старший7. Інструкція для користувача
Перед запуском програми треба відредагуватиабо створити файл piramid. dat. Він у кожному байті (до 255) може містити1-байтні числа. Для редагування зручно, наприклад, користуватися редактором VCу HEX-режимі.
Після цього треба запустити файл piramid,com. Післяїї роботи, якщо не виникне помилок, з’явиться файл piramid. out, який будемістити ті ж байти, що і вхідний, але у відсортованому порядку.
Висновки
Отже, ми розглянули як працює алгоритмпірамідального сортування і спробували визначити його складність.
Застосування того чи іншого алгоритмусортування для вирішення конкретної задачі є досить складною проблемою, вирішенняякої потребує не лише досконалого володіння саме цим алгоритмом, але йвсебічного розглядання того чи іншого алгоритму, тобто визначення усіх йогопереваг і недоліків.
Звичайно, необхідність застосування самешвидких алгоритмів сортування очевидна. Адже прості алгоритми сортування недають бажаної ефективності в роботі програми. Але завжди треба пам’ятати й проте, що кожний швидкий алгоритм сортування поряд із своїми перевагами можемістити і деякі недоліки.
Розглядаючи такий швидкий алгоритм сортування,як пірамідальне сортування, можна зазначити, що цей алгоритм ефективний, аджевін сортує “на місці", тобто він не потребує додаткових масивів. Крімтого, цей алгоритм оптимальний: його складність співпадає з нижньою оцінкоюзадачі, тобто за критеріями C (n) та M (n) він має складність O (n log2 n), алемістить складний елемент в умові. Тобто, в умові A [left] має бути строго меншеніж x, а A [right] — строго більше за x. Якщо ж замість “строго більше” та“строго менше" поставити знаки, що позначають “більше, або дорівнює” та“менше, або дорівнює", то індекси left і right пробіжать увесь масив іпобіжать далі. Вийти з цієї ситуації можна було б шляхом ускладнення умовпродовження перегляду, але це б погіршило ефективність програми.
Отже, головною задачею, яку має вирішитилюдина, яка повинна розв’язати задачу сортування — це визначення як позитивних,так і усіх негативних характеристик різних алгоритмів сортування, передбаченнякінцевого результату. До того ж, треба враховувати головне — чи, можливо, цюзадачу задовольнить один з класичних простих алгоритмів сортування.Використана література
1. Львов М.С., СпіваковськийО.В. Основи алгоритмізації та програмування. — Херсон, 1997.
2. Д. Кнут. Искусствопрограммирования ЭВМ: Т.3. Сортировка и поиск. М., МИР, 1978.
ДодатокЛістинг програми
.286
. model tiny
. code
org 100h
start:
jmp begin
n db?
a db 0,255 dup (?)
; si=i; di=j
conswap proc near
pusha
mov al,byte ptr a [si]
mov bl,byte ptr a [di]
cmp al,bl
jae con_sk
mov byte ptr a [si],bl
mov byte ptr a [di],al
con_sk:
popa
retn
conswap endp
conflict proc near
push bp
mov bp,sp
pusha
mov ax, [bp+4]; i
mov bx, [bp+6]; k
; j=dx
mov dx,ax
shl dx,1; j=i*2
cmp dx,bx
ja conf_stop; j>k
cmp dx,bx
jb conf_1
; j=k
; conswap (i,j)
mov si,ax
mov di,dx
call conswap
jmp conf_stop
; j
conf_1:
push ax
mov si,dx
mov ah,byte ptr a [si+1]
mov al,byte ptr a [si]
cmp ah,al
jbe sk_2
inc dx
sk_2:
pop ax
; if (a [j+1] >a [j]) j++;
; conswap (i,j)
mov si,ax
mov di,dx
call conswap
; conflict (j,k);
push bx
push dx
call conflict
pop dx
pop bx
conf_stop:
popa
pop bp
retn
conflict endp
sorttree proc near
push bp
mov bp,sp
pusha
mov ax, [bp+4]; i
mov bl,n
xor bh,bh; n
shr bx,1
cmp ax,bx; i
jae sort_exit
; sorttree (2*i)
mov bx,ax
shl bx,1
push bx
call sorttree
pop bx
; sorttree (2*i)
mov bx,ax
shl bx,1
inc bx
push bx
call sorttree
pop bx
; conflict (i,n)
mov bl,n
xor bh,bh
push bx
push ax
call conflict
pop ax
pop bx
sort_exit:
popa
pop bp
retn
sorttree endp
start_sort proc
mov ax,1
push ax
call sorttree
pop ax
mov cl,n
mov ch,0
inc cx
lo:
; conswap (k,1)
mov si,cx
mov di,1
call conswap
; conflict (1,k-1)
mov bx,cx
dec bx
push bx
push ax
call conflict
pop ax
pop bx
dec cx
cmp cx,1
jne lo
ret
start_sort endp
in_file db 'piramid. dat',0
out_file db 'piramid. out',0
errm db 'File error$'
begin:
; вiдкрити вхiдний файл
mov ah,3dh
mov al,0
mov dx,offset in_file
int 21h
jc err_file
mov si,ax; handle
; read
mov ah,3fh
mov bx,si
mov cx,255
mov dx,offset a+1
int 21h
mov n,al
; close
mov ah,3eh
mov bx,si
int 21h
call start_sort
; creat
mov ah,3ch
xor cx,cx
mov dx,offset out_file
int 21h
mov si,ax
; write
mov ah,40h
mov bx,si
mov cl,n
mov ch,0
mov dx,offset a+1
int 21h
; close
mov ah,3eh
mov bx,si
int 21h
. exit 0
err_file:
mov ah,9
mov dx,offset errm
int 21h
. exit 0
end start


Не сдавайте скачаную работу преподавателю!
Данный реферат Вы можете использовать для подготовки курсовых проектов.

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :

Пишем реферат самостоятельно:
! Как писать рефераты
Практические рекомендации по написанию студенческих рефератов.
! План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом.
! Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач.
! Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты.
! Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ.

Читайте также:
Виды рефератов Какими бывают рефераты по своему назначению и структуре.