- •Указатели: Определение и использование (примеры)
- •Операции над указателями и адресами.
- •Методы доступа к элементам массивов.
- •Двойные указатели. Назначение и использование (примеры).
- •Типовая структура программы на языке Си.
- •Методы передачи параметров в функцию.
- •Рекурсивные функции. Пример использования.
- •Организация работы с файлами. Открытие, закрытие и режимы доступа.
- •Динамические массивы.
- •Динамические структуры.
- •Списки. Линейные и связанные списки.
- •Стеки и очереди. Организация хранения в стеке.
- •Линейная сортировка, метод пузырька.
- •Сортировка вставкой, посредством выбора.
- •Сортировка списков путем слияния.
- •Быстрая сортировка.
- •Алгоритмы поиска.
- •Классы памяти, время жизни объектов
- •Правила инициализации переменных с различным временем жизни.
- •Модели памяти компьютера при работе с программами.
- •Управление экраном и курсором в текстовом режиме,
- •Организация видеопамяти в текстовом режиме. Управление цветом.
- •Понятие Объектно-ориентированного программирования.
- •Методология объектно-ориентированного программирования.
- •37. Проектирование по. Стиль оформления программ.
- •Эффективность и технологичность программ
- •Программирование «с защитой от ошибок». Сквозной структурный контроль.
- •Виды контроля качества разрабатываемого по
- •Понятие структурного тестирования программ
- •Функциональное тестирование программ.
- •Отладка программного обеспечения, виды ошибок.
- •Методы отладки программного обеспечения.
- •45.Правила составления документации программного продукта
Алгоритмы поиска.
* Алгоритм поиска A* — особый случай поиска по первому наилучшему совпадению; используется эвристика, увеличивающая скорость работы алгоритма
* Алгоритм выбора (англ.) — модификация алгоритма линейного поиска; находит k-тый по величине элемент в списке;
* Двоичное деревое — использует бинарное дерево для хранения элементов(Дерево — это совокупность элементов, называемых узлами (при этом один из них определен как корень), и отношений (родительский–дочерний), образующих иерархическую структуру узлов. Узлы могут являться величинами любого простого или структурированного типа, за исключением файлового. Узлы, которые не имеют ни одного последующего узла, называются листьями.
В двоичном (бинарном) дереве каждый узел может быть связан не более чем двумя другими узлами. Рекурсивно двоичное дерево определяется так: двоичное дерево бывает либо пустым (не содержит ни одного узла), либо содержит узел, называемый корнем, а также два независимых поддерева — левое поддерево и правое поддерево.
Двоичное дерево поиска может быть либо пустым, либо оно обладает таким свойством, что корневой элемент имеет большее значение узла, чем любой элемент в левом поддереве, и меньшее или равное, чем элементы в правом поддереве. Указанное свойство называется характеристическим свойством двоичного дерева поиска и выполняется для любого узла такого дерева, включая корень. Далее будем рассматривать только двоичные деревья поиска. Такое название двоичные деревья поиска получили по той причине, что скорость поиска в них примерно такая же, что и в отсортированных массивах: O(n) = C • log2n (в худшем случае O(n) = n).
Пример. Для набора данных 9, 44, 0, –7, 10, 6, –12, 45 построить двоичное дерево поиска.
Согласно определению двоичного дерева поиска число 9 помещаем в корень, все значения, меньшие его — на левое поддерево, большие или равные — на правое. В каждом поддереве очередной элемент можно рассматривать как корень и действовать по тому же алгоритму. В итоге получаем
Выделим типовые операции над двоичными деревьями поиска:
добавление элемента в дерево;
удаление элемента из дерева;
обход дерева (для печати элементов и т.д.);
поиск в дереве.
Поскольку определение двоичного дерева рекурсивно, то все указанные типовые операции могут быть реализованы в виде рекурсивных подпрограмм (на практике именно такой вариант чаще всего и применяется). Отметим лишь, что использование рекурсии замедляет работу программы и расходует лишнюю память при её выполнении.
);
* Двоичный поиск — находит элемент в отсортированном списке
* Интерполирующий поиск (Предсказывающий поиск, Поиск по словарю)
* Линейный поиск — находит элемент в неотсортированном списке
* Локальный поиск (оптимизация)
* Метод штрафов (англ.)
* Поиск в глубину — проходит граф ветка за веткой
* Поиск в ширину — проходит граф уровень за уровнем
* Поиск по первому наилучшему совпадению (англ.) (англ. Best-first search) — проходит граф в порядке важности, используя очередь приоритетов
* Троичный поиск — находит максимум или минимум функции
* Поиск в хеш-таблице
* Алгоритм Ли (волновой алгоритм) — поиск пути на карте.