Всё сдал! - помощь студентам онлайн Всё сдал! - помощь студентам онлайн

Реальная база готовых
студенческих работ

Узнайте стоимость индивидуальной работы!

Вы нашли то, что искали?

Вы нашли то, что искали?

Да, спасибо!

0%

Нет, пока не нашел

0%

Узнайте стоимость индивидуальной работы

это быстро и бесплатно

Получите скидку

Оформите заказ сейчас и получите скидку 100 руб.!


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

Тип Реферат
Предмет Информатика и программирование
Просмотров
1760
Размер файла
31 б
Поделиться

Ознакомительный фрагмент работы:

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

Міністерство освіти та науки України

Кіровоградський Державний Технічний університет

Кафедра програмного забезпечення

Курсовий проект

з дисципліни

“Програмування на мові 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 [i mod 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<r, то перейти в п.5, якщо j=r, то перейти до п.6, інакше - до п.8.

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<k

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<n

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% суммы заказа

Техподдержка 7 дней в неделю

Наши менеджеры всегда на связи и оперативно решат любую проблему

Строгий отбор экспертов

К работе допускаются только проверенные специалисты с высшим образованием. Проверяем диплом на оценки «хорошо» и «отлично»

1 000 +
Новых работ ежедневно
computer

Требуются доработки?
Они включены в стоимость работы

Работы выполняют эксперты в своём деле. Они ценят свою репутацию, поэтому результат выполненной работы гарантирован

avatar
Математика
История
Экономика
icon
159599
рейтинг
icon
3275
работ сдано
icon
1404
отзывов
avatar
Математика
Физика
История
icon
156450
рейтинг
icon
6068
работ сдано
icon
2737
отзывов
avatar
Химия
Экономика
Биология
icon
105734
рейтинг
icon
2110
работ сдано
icon
1318
отзывов
avatar
Высшая математика
Информатика
Геодезия
icon
62710
рейтинг
icon
1046
работ сдано
icon
598
отзывов
Отзывы студентов о нашей работе
63 457 оценок star star star star star
среднее 4.9 из 5
Филиал государственного бюджетного образовательного учреждения высшего образования Московской област
Спасибо Елизавете за оперативность. Так как это было важно для нас! Замечаний особых не бы...
star star star star star
РУТ
Огромное спасибо за уважительное отношение к заказчикам, быстроту и качество работы
star star star star star
ТГПУ
спасибо за помощь, работа сделана в срок и без замечаний, в полном объеме!
star star star star star

Последние размещённые задания

Ежедневно эксперты готовы работать над 1000 заданиями. Контролируйте процесс написания работы в режиме онлайн

решить 6 практических

Решение задач, Спортивные сооружения

Срок сдачи к 17 дек.

только что

Задание в microsoft project

Лабораторная, Программирование

Срок сдачи к 14 дек.

только что

Решить две задачи №13 и №23

Решение задач, Теоретические основы электротехники

Срок сдачи к 15 дек.

только что

Решить 4задачи

Решение задач, Прикладная механика

Срок сдачи к 31 дек.

только что

Выполнить 2 задачи

Контрольная, Конституционное право

Срок сдачи к 12 дек.

2 минуты назад

6 заданий

Контрольная, Ветеринарная вирусология и иммунология

Срок сдачи к 6 дек.

4 минуты назад

Требуется разобрать ст. 135 Налогового кодекса по составу напогового...

Решение задач, Налоговое право

Срок сдачи к 5 дек.

4 минуты назад

ТЭД, теории кислот и оснований

Решение задач, Химия

Срок сдачи к 5 дек.

5 минут назад

Решить задание в эксель

Решение задач, Эконометрика

Срок сдачи к 6 дек.

5 минут назад

Нужно проходить тесты на сайте

Тест дистанционно, Детская психология

Срок сдачи к 31 янв.

6 минут назад

Решить 7 лабораторных

Решение задач, визуализация данных в экономике

Срок сдачи к 6 дек.

7 минут назад

Вариационные ряды

Другое, Статистика

Срок сдачи к 9 дек.

8 минут назад

Школьный кабинет химии и его роль в химико-образовательном процессе

Курсовая, Методика преподавания химии

Срок сдачи к 26 дек.

8 минут назад

Вариант 9

Решение задач, Теоретическая механика

Срок сдачи к 7 дек.

8 минут назад

9 задач по тех меху ,к 16:20

Решение задач, Техническая механика

Срок сдачи к 5 дек.

9 минут назад
9 минут назад
10 минут назад
planes planes
Закажи индивидуальную работу за 1 минуту!

Размещенные на сайт контрольные, курсовые и иные категории работ (далее — Работы) и их содержимое предназначены исключительно для ознакомления, без целей коммерческого использования. Все права в отношении Работ и их содержимого принадлежат их законным правообладателям. Любое их использование возможно лишь с согласия законных правообладателей. Администрация сайта не несет ответственности за возможный вред и/или убытки, возникшие в связи с использованием Работ и их содержимого.

«Всё сдал!» — безопасный онлайн-сервис с проверенными экспертами

Используя «Свежую базу РГСР», вы принимаете пользовательское соглашение
и политику обработки персональных данных
Сайт работает по московскому времени:

Вход
Регистрация или
Не нашли, что искали?

Заполните форму и узнайте цену на индивидуальную работу!

Файлы (при наличии)

    это быстро и бесплатно