![]() |
|
сделать стартовой | добавить в избранное |
![]() |
Структуры данных и алгоритмы |
Курсовая работа студента Гридасова А. Ю. Новосибирский государственный технический университет Кафедра прикладной математики Новосибирск 1998 Условие задачи Имеется некоторое конечное число городов, которые связаны транспортной сетью, состоящей из авиа, железнодорожных, автомобильных и водных рейсов произвольного направления и включающих произвольное число городов. Стоимость проезда различна по классам. Рейсы отправляются по недельному расписанию. При пересадки между рейсами должно быть не менее 2-х часов. По заданным начальному и конечному городам, дате желаемого отправления, максимальному времени пути и максимальной стоимости и максимальному числу пересадок выдать все возможные маршруты, так, чтобы маршруты с меньшей датой и временем прибытия отображались раньше, чем с большим. Анализ задачи Транспортная схема представляет собой направленный взвешенный мультиграф. Каждая дуга характеризуется принадлежностью к рейсу, временем пути, ценой каждого из классов, временем отправления. Входными данными является: Транспортная система. (города и все рейсы) Начальный, конечный город, ориентировочная дата и время отправления, максимальное время пути максимальная цена, максимальное количество пересадок. Причем данные первой группы изменяются крайне редко и задаются разработчиком транспортной системы, а данные второй группы изменяются от задачи к задачи и задаются каждым пользователем. Результатом работы программы является конечное множество маршрутов. Два маршрута мы будем считать различными, если они отличаются хотя бы одним городом следования или хотя бы одним рейсом. После того, как найдены все маршруты они сортируются по времени прибытия. Метод решения – метод последовательных испытаний. Поиск решений будет осуществляться рекурсивно, причем максимальная глубина рекурсии будет равна максимальному количеству пересадок. Так как мы имеем ограничения по некоторым параметрам то мы можем отсечь заведомо ошибочную ветвь поиска решений, сделав проверку на превышение параметров. Это позволит выиграть дополнительное время. (о реализации более подробно п.4) Выбор и обоснование форм представления данных. Так как транспортная система включает в себя достаточно большой объем информации, в целях доступа к большему объему памяти, также в целях более рационального использования памяти и по причине недопустимости использования статических объектов в некоторых случаях, в программе для внутреннего представления широко используются динамические объекты. Для объединения большого количества данных в одном объекте, а также для реализации динамических объектов используется комбинированный тип (запись). Для внутреннего хранения информации о рейсах используется цепь (однонаправленный список) PFligh с 7-ю информационными полями различных типов: Для хранения названия компании-перевозчика используется тип s ri g так по понятным причинам. Для хранения номера рейса используется тип s ri g т.к. в номерах рейса часто используются различные не цифровые шифры, индексы, коды. Общее количество городов – интервальный тип. Автоматическая проверка границ этого типа повышает надежность программы.
Таблица отправления представляется своим динамическим типом. Этот динамический тип представляет совой цепь с одним информационным полем , содержащим время отправления в минутах от начала недели ( например Вт 17:42 будет записан числом 1 24 60 17 60 42). Такая форма хранения времени сочетает с себе компактность и легкость пересчета (пересчет требуется только при вводе и выводе, а в программе в большинстве случаев пересчет не нужен. Динамический тип использован по причине большого разброса в частоте отправления рейсов (могут быть рейсы, отправляющиеся каждый день через час, а могут быть рейсы отправляющиеся раз в неделю). Маршрут рейса также представляется своим динамическим типом – однонаправленным динамическим списком. Причина использования списка аналогична полю отправления -разброс. Так например самолеты обычно не имеют более 4 посадок, а поезда наоборот делают много остановок. Информационное поле содержит информацию не об одной а о 4-х станциях, т.е. представляет собой массив из 4 элементов. Это сделано для экономии памяти на избыточных указателях. При этом усложнение кода программы незначительно. Тип транспорта кодируется числом 1.4. По понятным причинам. Перечислимый тип не был использован для упрощения ввода данных из внешнего файла. Классы, которые предоставляет рейс, представляется в виде массива индексом является класс, а типом элемента – булевский. Внутренне каждый город обозначается своим номером (элемент интервального типа), что уменьшает расходы памяти и упрощает вычисление. А для хранения названий городов и их координат для отображения на экране используется свой тип – массив, элементами которого являются записи с полями для названия города и координат. Статический массив используется для простого и быстрого доступа к этим данным. Для хранения времени пути используется тип I eger. Отрицательные числа нужны для контроля за превышением времени пути. Для хранения цены используется тип Lo gI . Причины выбора этого типа очевидны. Тип Pa er для хранения исходных параметров поиска представляет собой запись с полями: время отправления относительно понедельника в минутах, начальный и конечный город, допустимые типы транспорта, допустимые классы, максимальное количество пересадок, максимальное время пути, максимальная цена, допустимые классы. Выбор типов для всех полей кроме «допустимые типы транспорта» обсуждался выше. Для поля «допустимые типы транспорта» выбран массив где тип индекс – это тип транспорта, а тип элемента – булевский. Это сделано по причине того что маршрут может включать. Поездки на разных видах транспорта (тех где в значение rue). Запись использована чтоб передавать все данные единым объектом в процедуру поиска маршрута. Тип Li k предназначен для хранения информации о части маршрута между двумя городами, соединенными одним рейсом. Кроме ссылки на предыдущую такую часть он содержит ссылку на рейс, коды начального и конечного города, общую цену участка , время отправления, относительно заданного пользователем время отправления, общее время пути по участку. Типы полей и обоснования их выбора обсуждались выше.
В совокупности цепочка таких элементов задает один маршрут. Тип A swerLis предназначен для ответа - множества всех допустимых маршрутов. Представляет из себя однонаправленный список, в каждом элементе которого кроме ссылки на следующий имеется поле типа маршрут (Li k), общее время пути, общая максимальная и минимальная цена, количество пересадок. Типы полей и обоснование обсуждались выше. Внешнее представление: Транспортная система хранится во внешнем текстовом файле. Файл может быть создан любым текстовым редактором. В файле указывается следующее: Количество городов. Со следующей строки начинается информация о городах: название города, на следующей строчке координаты. После всех городов начинается информация о рейсах: компания, номер, тип, классы, количество станций; номер города, время пути, время стоянки цена по классам, для каждого города; время отправления от начальной станции. Так как эта информация редактируется крайне редко, причем разработчиком сети, то такой способ является наиболее приемлемым. Название городов вводятся как строки, дата – в любом формате (дд-мм-гг, дд-мм-гггг, дд-мес-гг и т.п.) время чч:мм. По умолчанию полагается дата – текущий день, время 0:00. Максимальное время пути, максимальное число пересадок, максимальная цена – вводятся как числа. Алгоритм Begi {Загрузка транспортной схемы}; {Ввод исходных данных и заполнение шаблона}; {Вызов процедуры поиска с введенным шаблоном, построенная часть маршрута - пустая}; {Вывод полученного множества маршрутов} E d {Процедура поиска маршрута с данным шаблоном и уже построенной частью маршрута} Begi While {просмотрены не все рейсы} do begi If {соответствует тип транспорта} a d {Текущий рейс не равен предыдущему} he Begi If {город отправления присутствует в рейсе, причем раньше конечной станции} he begi {Рассчитать время отправления ближайшего следующего рейса} Repea {Перейти к следующему городу}; {Рассчитать время дороги с учетом нового участка} If {текущий город еще не проезжали} a d {время пути не превышает максимального} a d {количество пересадок не превышает максимального} a d {не приехали } he {Добавить к маршруту проеханный участок. Вызвать процедуру поиска маршрута от текущего города до конечного с новыми значениями времени} U il {текущий город проезжали} or {время исчерпано} or {приехали} or {конец рейса}; If {приехали} a d {время не превышено} a d {минимальная цена рейса не выше допустимой} he {Добавить построенный маршрут в мно-во ответов на нужное место} e d; e d; {Перейти к следующему рейсу} e d; e d Текст программы на языке Pascal uses Cr , Da e, Graph; Co s MaxCi y=100; MClass=6; ype Ci yCode=1.maxci y; {Внутрений код города} Week=0.10079; {Тип время в минутак с 0:00 понедельника} Day able=^IDay able; {Таблица отправлений от начальной станции} IDay able=record ime:Week; ex :Day able; e d; WayKi d=1.4; {Тип пути (аэро, море, ж.д, авто)} WayClass=1.MClass; {Класс или тип перевозки} Ci ies=array of {Названия и координаты городов} record ame:s ri g of lo gi ; {Таблица стоимости по классам} Way=record Ci y:Ci ycode; Delay,Reboard:Word; Cos :mcos ; e d; WayP=^way; PWay=^Way1; {Информация о городах следования рейса} Way1=record Way:array of way; ex :PWay; e d; wclass=array of boolea ; PFligh =^Fligh ; Fligh =record {Информация о рейсе} compa y:s ri g; o als a io :Ci yCode; able:Day able; pa h:PWay; ki d:WayKi d; class:WClass; ex :PFligh ; e d; Bla k=record {Шаблон для поиска пути} delay:Week; BCi y,ECi y:Ci yCode; Ki d:array of boolea ; ReBoadi g:Ci yCode; Way ime:I eger; Cos :Lo gi ; Class:WClass; e d; Li k=^Ci yLis ; {Цепочка рейсов для проезда от начала до конца} Ci yLis =record {Информация о проезде между двумя пунктами одним рейсом} DDelay:Word; way ime:word; cos :mcos ; Bci y, arge :Ci yCode; Fligh :PFligh ; Las :Li k; e d; A swerLis =^IA swer; {Список всех возможных маршрутов следования} IA swer=record pa h:li k; reboard:ci ycode; mi cos ,maxcos :lo gi ; way ime:word; ex :A swerLis ; e d; var La swer:A swerLis ; {глобальная переменная - начало списка маршрутов } {Добавления нового найденного маршрута} Procedure A swer(A:Li k;cos :lo gi ); var P,Q:Li k; d,s1,s2:word; W,PA swer:a swerlis ; r:ci ycode; fu c io mi (a:mcos ):lo gi ; {Минимальная стоимость по классам} var i:i eger; m:lo gi ; begi m:=1000000000; for i:=1 o Mclass do if (m>a; mi :=m e d; fu c io max(a:mcos ):lo gi ; {Максимальная стоимость по классам} var i:i eger; m:lo gi ; begi m:=a he m:=a; max:=m e d; begi ew(PA swer); Pa swer^.p
Затем, используя обычный алгоритм планирования, ядро выбирает порожденный процесс для исполнения и тот «доигрывает» свою роль в алгоритме fork. Контекст порожденного процесса был задан родительским процессом; с точки зрения ядра кажется, что порожденный процесс возобновляется после приостанова в ожидании ресурса. Порожденный процесс при выполнении функции fork реализует ту часть программы, на которую указывает счетчик команд, восстанавливаемый ядром из сохраненного на уровне 2 регистрового контекста, и по выходе из функции возвращает нулевое значение. На Рисунке 7.3 представлена логическая схема взаимодействия родительского и порожденного процессов с другими структурами данных ядра сразу после завершения системной функции fork. Итак, оба процесса совместно пользуются файлами, которые были открыты родительским процессом к моменту исполнения функции fork, при этом значение счетчика ссылок на каждый из этих файлов в таблице файлов на единицу больше, чем до вызова функции. Порожденный процесс имеет те же, что и родительский процесс, текущий и корневой каталоги, значение же счетчика ссылок на индекс каждого из этих каталогов так же становится на единицу больше, чем до вызова функции
2. Структуры данных и алгоритмы
3. Структура и алгоритмы работы спутниковых радионавигационных систем
5. Динамические структуры данных: двоичные деревья
9. Автоматизированная система обработки структур данных
10. Структура данных программного комплекса "Q-дерево"
11. Фізична структура даних. Бухгалтерські інформаційні системи
12. Динамические структуры данных
13. Динамические структуры данных: дек
14. Алгоритм создания базы данных складского учета
15. Применение алгоритма RSA для шифрования потоков данных
16. Структура и формирование исходных данных, необходимых для расчета параметров технологических схем
18. Реализация алгоритма обработки данных
19. Алгоритмы и организация данных
21. Методика создания структуры базы данных на персональном компьютере
25. Анализ устойчивости и поддержание орбитальной структуры космической системы связи
27. Структура и состояние водоснабжения и водосброса, подземных вод и артезианских скважин города Киева
28. Подготовка данных и движение по азимутам
29. Статистика населения. Методы анализа динамики и численности и структуры населения
30. Структура транспорта в Европе
31. Экономическая система Дании
32. Минеральный состав, текстуры и структуры руд.
33. Аппарат государственной власти и его структура
35. Нормы права. Структура норм права
36. Структура государственных органов США по Конституции 1787 года
41. Структура налоговых органов РФ права, обязанности и функции
42. Структура налоговых органов Российской Федерации
43. Цели, задачи и структура Федерального закона № 122-ФЗ
45. Структура правоотношения. Классификация правоотношений: критерии и виды
46. Структуры экономического дискурса во французском языке. Роль коннекторов в построении аргументации
47. База данных для проекта досугового учреждения в городе Муроме Владимирской области
48. Структура культуры. Классификация ее видов
50. Загальна структура мовної системи
51. Трансформация жанровой структуры литературы Древнего Египта
53. Данило Нечай - сподвижник Богдана Хмельницкого
57. Интернет: административное устройство и структура глобальной сети
58. Построение сети передачи данных
59. Электронная почта и факсимильная связь. Структура и прицип работы
60. Глобальные гипертекстовые структуры: WWW
64. Принцип программного управления. Микропроцессор. Алгоритм работы процессора
65. Организация и применение микропроцессорных систем обработки данных и управления
66. Алгоритм Кнута-Морриса-Пратта
67. Сжатие данных
68. Анализ структур, характеристик и архитектур 32-разрядных микропроцессоров
69. Формирование структуры электронного учебника и решение задач на ней
73. База данных для учета оплаты за междугородние разговоры
74. Реляционные Базы Данных. SQL - стандартный язык реляционных баз данных
75. Программа сложной структуры с использованием меню
76. Примеры баз данных (Студенческая группа)
77. Программа сложной структуры с использованием меню
78. Работа с Базами данных в Delphi
79. Анализ пакетов обработки экспериментальных данных SABR и BOOTSTRAP
80. Разработка базы данных, отражающей учет успеваемости студентов
81. Разработка базы данных "Кадры"
82. Лекции по теории проектирования баз данных (БД)
84. Fox Pro - реляционная модель данных
85. Понятие алгоритма, его свойства. Описание алгоритмов с помощью блок схем на языке Turbo Pascal
89. Обработка данных о студентах
90. Разработка системы задач (алгоритмы-программы) по дискретной математике
92. Системы принятия решений, оптимизация в Excel и базы данных Access
94. Ввод и редактирование данных в Word
95. КОНСОЛИДАЦИЯ ДАННЫХ И ФИЛЬТРЫ В MicroSoft Excel
96. Работа в среде EXCEL. Средства управления базами данных в EXCEL
98. Структура сходящихся последовательностей
99. Адаптивное параметрическое оценивание квадратно-корневыми информационными алгоритмами