|
|
|
hkdkest |
|
|||
Опытный Профиль Группа: Участник Сообщений: 300 Регистрация: 30.11.2008 Репутация: 1 Всего: 1 |
||||
|
||||
hkdkest |
|
|||
Опытный Профиль Группа: Участник Сообщений: 300 Регистрация: 30.11.2008 Репутация: 1 Всего: 1 |
продолжение:
Другой интересный тип очередей -многопоточная очередь (multi-headed queue). Элементы, как обычно, вводятся в конец очереди, но очередь имеет несколько пе- редних концов (front end), или голов (head). Программа может удалять элементы из любой головы. Примером многопоточной очереди в реальной жизни является очередь клиен- тов в банке. Все клиенты стоят в одной очереди, но обслуживаются несколькими кассирами. Освободившийся банковский работник выполняет заказ клиента, ко- торый находится в очереди первым. Такой порядок кажется справедливым, пото- му что клиенты обслуживаются в порядке прибытия. Это очень эффективно, по- скольку все кассиры заняты, пока есть клиенты. • Очереди с приоритетом - Delphi • Многопоточные очереди - Delphi • Моделирование очередей - Delphi • Треугольные массивы - Delphi • Диагональные элементы - Delphi • Нерегулярные массивы - Delphi • Линейное представление с указателем нерегулярных массивов - Delphi • Нерегулярные связанные списки - Delphi • Динамические массивы Delphi - Delphi • Разреженные массивы - Delphi • Индексирование массива - Delphi • Сильно разреженные массивы - Delphi |
|||
|
||||
hkdkest |
|
|||
Опытный Профиль Группа: Участник Сообщений: 300 Регистрация: 30.11.2008 Репутация: 1 Всего: 1 |
продолжение (Рекурсия):
Рекурсия (Recursion) - это мощный метод программирования, который позволя- ет делить проблему на части все меньшего и меньшего размера до тех пор, пока они не станут настолько малы, что решение этих подзадач сведется к набору про- стых операций. После того как вы поработаете с рекурсией, вы обнаружите, что она встречается достаточно часто. Многие программисты-новички иногда чрезмерно увлекаются рекурсией и начинают применять ее в ситуациях, где она не нужна и даже вредна. В первых разделах этой главы рассматривается вычисление факториалов, чи- сел Фибоначчи и наибольшего общего делителя. Приводятся примеры неправиль- ного использования рекурсии (нерекурсивные версии более эффективны). Они интересны и наглядны, поэтому имеет смысл поговорить о них. Затем в главе рассматривается несколько примеров, в которых применение рекурсии более уместно. Алгоритмы построения кривых Гильберта и Серпинско- го используют рекурсию должным образом и очень эффективно. В заключительных разделах этой главы объясняется, почему факториалы, чис- ла Фибоначчи и наибольший общий делитель лучше вычислять без применения рекурсии. Также говорится о том, когда не следует использовать рекурсию и при- водятся способы ее устранения. • Рекурсия - Delphi • Что такое рекурсия - Delphi • Рекурсивное вычисление факториалов - Delphi • Рекурсивное вычисление наибольшего общего делителя - Delphi • Рекурсивное вычисление чисел Фибоначчи - Delphi • Рекурсивное построение кривых Гильберта - Delphi • Рекурсивное построение кривых Серпинского - Delphi • Недостатки рекурсии. Бесконечная рекурсия - Delphi • Потери памяти при использовании рекурсии - Delphi |
|||
|
||||
hkdkest |
|
|||
Опытный Профиль Группа: Участник Сообщений: 300 Регистрация: 30.11.2008 Репутация: 1 Всего: 1 |
продолжение (Рекурсия):
При работе с рекурсивными алгоритмами следует избегать трех основных опас- ностей: бесконечная рекурсия. Убедитесь, что ваш алгоритм имеет надежное условие остановки; глубокая рекурсия. Если алгоритм вызывает слишком глубокую рекурсию, он исчерпает всю память стека. Сократите использование стека, уменьшив коли- чество переменных, которые размещает процедура, или описывая переменные глобально. Если процедура все еще исчерпывает память стека, перепишите алгоритм без рекурсии с помощью устранения хвостовой рекурсии; неуместная рекурсия. Обычно это происходит, когда алгоритм, подобный рекурсивному алгоритму подсчета чисел Фибоначчи, много раз вычисляет одни и те же промежуточные значения. Если в вашей программе возникают проблемы подобного рода, попытайтесь переписать алгоритм методом сни- зу вверх. Если алгоритм нельзя преобразовать с помощью восходящего спо- соба, создайте таблицу соответствия промежуточных значений. Но применение рекурсии не всегда бывает неоправданным. Многие задачи ре- курсивны по своей природе. В этих случаях рекурсивный алгоритм будет проще понять, отладить и реализовать, чем нерекурсивный. Алгоритмы построения кри- вых Гильберта и Серпинского демонстрируют именно такую рекурсию. Оба они естественно рекурсивны, и их гораздо проще понять в рекурсивном представлении. Если имеется алгоритм, который является рекурсивным по своей природе, но вы не уверены, можно ли с помощью рекурсивной версии решить задачу, перепи- шите ее рекурсивно и выясните это. Проблемы может и не возникнуть. Если ка- кие-либо трудности все же имеются, будет гораздо проще преобразовать рекурсив- ный алгоритм в нерекурсивную форму, чем сразу создать нерекурсивную версию. • Удаление хвостовой рекурсии - Delphi • Нерекурсивное вычисление чисел Фибоначчи - Delphi • Устранение рекурсии в общем случае - Delphi • Нерекурсивное создание кривых Гильберта - Delphi • Нерекурсивное построение кривых Серпинского - Delphi |
|||
|
||||
hkdkest |
|
|||
Опытный Профиль Группа: Участник Сообщений: 300 Регистрация: 30.11.2008 Репутация: 1 Всего: 1 |
продолжение (Деревья. Представление деревьев):
Один из способов реализации деревьев в Delphi заключается в со- здании отдельного класса для каждого типа узлов дерева. Чтобы построить дере- во, необходимо определить структуры данных для узлов, которые имеют нуль, один, два или три дочерних узла. Этот подход не слишком удобен. Кроме того что требуется управлять четырьмя различными классами, не- обходимо иметь некоторый индикатор внутри класса, который указывал бы тип дочернего узла. Алгоритмы, оперирующие подобными деревьями, должны быть способны работать со всеми типами узлов. Части троичного (степени 3) дерева • Представления деревьев - Delphi • Представления деревьев. Полные узлы - Delphi • Представления деревьев. Списки дочерних узлов - Delphi • Представления деревьев. Представление нумерацией связей - Delphi • Представления деревьев. Полные деревья - Delphi • Обход дерева - Delphi • Упорядоченные деревья - Delphi • Добавление элементов в двоичные деревья - Delphi • Удаление элементов из сортированного дерева - Delphi • Обход упорядоченных деревьев - Delphi • Деревья со ссылками - Delphi • Особенности обработки дерева с потоками - Delphi |
|||
|
||||
hkdkest |
|
|||
Опытный Профиль Группа: Участник Сообщений: 300 Регистрация: 30.11.2008 Репутация: 1 Всего: 1 |
продолжение (Деревья):
Q-дерево (quadtree) описывает пространственные отношения между элемен- тами в пределах какой-либо ограниченной площади. Например, область может быть картой, а элементы будут обозначать расположение домов или предприятий на ней. Каждый узел в Q-дереве является частью общей области, представленной дан- ным деревом. Каждый узел, который не является листом, имеет четыре дочерних, узла которые соответствуют северо-западному, северо-восточному, юго-восточно- му и юго-западному квадранту области узла. Лист может хранить элементы в свя- занном списке. Следующий код показывает ключевые части объявления класса TQtreeNode... • Q-деревья - Delphi • Восьмеричные деревья - Delphi • Балансировка деревьев - Delphi • AVL-деревья - Delphi • Добавление узлов к AVL-дереву - Delphi • Вращение AVL-деревьев для добавления узла - Delphi • Правое вращение AVL-дерева для добавления узла - Delphi • Левое вращение AVL-дерева для добавления узла - Delphi • Вращение влево-вправо для добавления узла - Delphi • Вращение вправо-влево для добавления узла - Delphi • Добавление узлов в Delphi - Delphi • Удаление узлов из AVL-дерева - Delphi • Левое вращение при удалении узла - Delphi • Вращение вправо-влево при удалении узла - Delphi • Другие типы вращения при удалении узла - Delphi • Удаление узлов в Delphi - Delphi |
|||
|
||||
hkdkest |
|
|||
Опытный Профиль Группа: Участник Сообщений: 300 Регистрация: 30.11.2008 Репутация: 1 Всего: 1 |
Продолжение (Б-деревья):
Б-дерево порядка К обладает следующими свойствами: - каждый узел содержит максимум 2 * К ключей; - каждый узел, за исключением корня, содержит не менее К ключей; - внутренний узел, где расположено М ключей, имеет М + 1 дочерних узлов; - все листья дерева находятся на одном уровне Б-дерево на рис. 7.15 имеет порядок 2. Каждый узел может содержать до че- тырех ключей. Каждый узел, кроме корня, должен иметь не менее двух ключей. Для удобства в узлы Б-дерева обычно поме- щают четное количество ключей, поэтому по- рядок является, как правило, целым числом. Требование, чтобы каждый узел в Б-де- реве порядка К содержал от К до 2 * К клю- чей, поддерживает баланс дерева. Поскольку каждый узел должен содержать, по крайней мере, К ключей, он должен иметь не меньше К + 1 дочерних узлов, поэтому дерево не может стать слишком высоким и тонким. Б-дерево, содержащее N узлов, может иметь глубину максимум O(logK+1(N). Следовательно, сложность алгоритма поиска в таком дереве будет порядка O(logN). Хотя это и не так очевидно, добавление и уда- ление элементов из Б-дерева также имеют сложность порядка O(logN). • Б-деревья - Delphi • Производительность Б-дерева - Delphi • Добавление элементов в Б-дерево - Delphi • Удаление элементов из Б-дерева - Delphi • Разновидности Б-дерева - Delphi • Нисходящие Б-деревья - Delphi • Б+деревья - Delphi • Усовершенствование Б-деревьев - Delphi • Добавление свободного пространства (Б-деревья)) - Delphi • Вопросы доступа к диску (Б+/-деревья) - Delphi • Псевдоуказатели (Б-деревья) - Delphi • Выбор размера сегмента (Б-деревья) - Delphi • Кэширование узла (Б-деревья) - Delphi • База данных на основе Б+дерева - Delphi |
|||
|
||||
hkdkest |
|
|||
Опытный Профиль Группа: Участник Сообщений: 300 Регистрация: 30.11.2008 Репутация: 1 Всего: 1 |
Создать базу данных, сформированную в виде файла записей. В каждой записи определены поля. Необходимо реализовать следующие операции: создание и удаление записи, сохранение и считывание файла записей с диска, редактирование, поиск и сортировку данных в алфавитном порядке, просмотр записей и навигацию по базе данных.
• Создание базы данных в виде файла записей |
|||
|
||||
hkdkest |
|
|||
Опытный Профиль Группа: Участник Сообщений: 300 Регистрация: 30.11.2008 Репутация: 1 Всего: 1 |
||||
|
||||
hkdkest |
|
|||
Опытный Профиль Группа: Участник Сообщений: 300 Регистрация: 30.11.2008 Репутация: 1 Всего: 1 |
||||
|
||||
hkdkest |
|
|||
Опытный Профиль Группа: Участник Сообщений: 300 Регистрация: 30.11.2008 Репутация: 1 Всего: 1 |
||||
|
||||
hkdkest |
|
|||
Опытный Профиль Группа: Участник Сообщений: 300 Регистрация: 30.11.2008 Репутация: 1 Всего: 1 |
||||
|
||||
hkdkest |
|
|||
Опытный Профиль Группа: Участник Сообщений: 300 Регистрация: 30.11.2008 Репутация: 1 Всего: 1 |
Статьи по созданию справочной системы (CC):
• Создание справочной системы в Microsoft Help Workshop - Delphi • Создание файла документа справки - Delphi • Подключение Microsoft Help Workshop - Delphi • Создание файла содержания (*.cnt) - Delphi • Создание файла проекта справки (*.hpj) - Delphi • Компиляция проекта справки в Microsoft Help Workshop - Delphi |
|||
|
||||
hkdkest |
|
|||
Опытный Профиль Группа: Участник Сообщений: 300 Регистрация: 30.11.2008 Репутация: 1 Всего: 1 |
• Работа с табличной информацией - String Grid
Компонент String Grid (страница Additional) представляет собой таблицу, ячейки которой содержат строки символов. Он используется при решении задач с выводом какой-либо последовательности чисел (массива), букв. Таблица состоит из N столбцов и M строк для отображения двумер- ной информации. • Работа со списками. Простой список ListBox Список представляет собой упорядоченную совокупность элементов, являющихся текстовыми строками. Они широко применяются в Windows, например, для отображения перечня шрифтов в текстовом редакторе. • Работа со списками. Комбинированный список ComboBox Компонент ComboBox (страница Standard) объединяет поле редактирования и список. Работа с таким списком практически не отличается от работы с простым списком ListBox. |
|||
|
||||
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Компьютерная литература | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |