- •Программа государственного экзамена
- •Пояснительная записка
- •Основные задачи государственного экзамена
- •Содержание государственного экзамена
- •Структура экзаменационного билета
- •Требования к ответу на вопросы экзаменационного билета
- •Критерии оценки ответа
- •Программа
- •I. Общепрофессиональные дисциплины
- •Раздел 1. Программирование на языке высокого уровня
- •Динамический тип данных, линейные динамические структуры данных: стек, очередь, списки; нелинейные динамические структуры данных: мультисписки, деревья.
- •Процедуры и функции: описание, вызов, передача параметров, программирование рекурсивных алгоритмов.
- •Раздел 2. Компьютерная графика
- •Раздел 3. Организация эвм и систем
- •Архитектура эвм, периферийные устройства, организация ввода-вывода информации.
- •Системы эвм: вычислительные системы и сети, сопроцессоры, мультипроцессорные вычислительные системы, матричные и конвейерные вычислительные системы, связные устройства, модемы, протоколы обмена.
- •Раздел 4. Операционные системы
- •Виртуальная память: страничная, сегментная, сегментно-страничная организация памяти, коллективное использование и защита информации; файлы, отображаемые в память.
- •Файловая система ос: состав, управление, типы файловых систем; логическая и физическая организация файла, методы доступа, операции над файлами, отображаемые файлы.
- •Раздел 5. Базы данных
- •Управление транзакциями, сериализация транзакций (синхронизационные захваты, метод временных меток), изолированность пользователей.
- •Архитектура "клиент-сервер": открытые системы, клиенты и серверы локальных сетей, системная архитектура "клиент-сервер", серверы баз данных.
- •Распределенные бд: разновидности распределенных систем, распределенная субд System r, интегрированные или федеративные системы и мультибазы данных.
- •Раздел 6. Сети эвм и телекоммуникации
- •Передача дискретных данных: линии связи, методы передачи дискретных данных на физическом уровне, методы передачи данных канального уровня, методы коммутации.
- •Средства анализа и управления сетями: функции и архитектура систем управления сетями, стандарты систем управления, мониторинг и анализ локальных сетей.
- •Раздел 7. Методы и средства защиты компьютерной информации
- •Безопасность компьютерных сетей: протоколы сетевой безопасности, программно-аппаратные комплексы защиты сетей.
- •Безопасность современных ос и программных комплексов, вредоносные программы, системы обнаружения вторжений, комплексный подход к проектированию и анализу защищенных ис.
- •Раздел 8. Системное программирование
- •Организация ячеек памяти, регистры, форматы команд.
- •Ассемблер: основные понятия, директивы, команды. Условный и безусловный переходы. Циклы. Массивы. Процедуры. Упакованные данные. Структуры.
- •Защищенный режим процессора Intel 80386: страничная адресация, переключение контекста, использование возможностей защищенного режима различными ос.
- •Раздел 9. Структуры и алгоритмы обработки данных
- •Абстрактный тип данных. Линейные и нелинейные структуры данных. Стек, очередь, списки, деревья, графы.
- •Алгоритмы сортировки: методы внутренней и внешней сортировки, анализ сложности и эффективности алгоритмов сортировки.
- •Алгоритмы поиска: последовательный, бинарный, интерполяционный поиск, использование деревьев в задачах поиска; хеширование с открытой и закрытой адресацией; алгоритмы поиска подстроки в строке.
- •Раздел 10. Функциональное и логическое программирование
- •Принципы функционального программирования: программирование при помощи функций, функциональность, основные свойства функциональных языков, язык программирования Лисп, рекурсия.
- •Функционалы: функциональное значение функции, способы композиции функций, функции более высокого порядка.
- •Раздел 11. Объектно-ориентированное программирование
- •Параметрический полиморфизм: шаблонные классы и шаблонные функции - назначение, параметризованные типы данных, синтаксис и семантика.
- •Раздел 12. Теория вычислительных процессов
- •Элементы теории вычислимости: вычислимость и разрешимость, интуитивное и точное понятие алгоритма, вычислимые функции, машина Тьюринга, массовые алгоритмические проблемы.
- •Раздел 13. Теория языков программирования и методы трансляции
- •Раздел 14. Архитектура вычислительных систем
- •Раздел 15. Технология разработки программного обеспечения
- •1 Область применения
- •Структуры данных: несвязанные, с неявными связями, с явными связями; иерархические модели Джексона-Орра; моделирование данных – диаграммы «сущность-связь» (erd); метод Баркера; метод idef1.
- •Разработка структуры по при объектом подхода
- •Раздел 16. Человеко-машинное взаимодействие
- •Типы пользовательских интерфейсов и этапы их разработки, психофизические особенности человека, связанные с восприятием, запоминанием и обработкой информации.
- •Раздел 17. Системы искусственного интеллекта
- •Системы распознавания образов (идентификации): обучение распознаванию образов, геометрический и структурный подходы, гипотеза компактности, адаптация и обучение.
- •Эволюционные методы поиска решений: метод группового учета аргументов, генетический алгоритм.
- •Экспертные системы: классификация и структура; инструментальные средства проектирования, разработки и отладки; этапы разработки; примеры реализации.
- •Раздел 18. Проектирование информационных систем
- •Архитектуры реализации корпоративных информационных систем на платформах Sun, Microsoft, Linux.
- •Раздел 19. Сетевые операционные системы
- •Основные концепции ос семейства Windows nt: особенности установки, конфигурирования, администрирования, оптимизации производительности.
- •Администрирование удаленного доступа к сетям Windows, взаимодействие с сетями tcp/ip, взаимодействие с сетями NetWare, средства просмотра сетевых ресурсов.
- •Основные концепции ос unix/Linux, средства графического интерфейса пользователей, основные механизмы и компоненты ядра, программирование в среде unix /Linux.
- •Основные концепции ос NetWare, проектирование Novell Directory Services, поддержка ос NetWare.
- •Администрирование ос NetWare, дополнительные средства ос NetWare: средства защиты nds для nt, встроенные утилиты администрирования сети.
- •Раздел 20. Комплексные программные платформы
- •Системы планирования ресурсов предприятия (erp). Основные понятия, принципы, подсистемы.
- •Методология внедрения erp-систем.
- •Раздел 21. Программное обеспечение распределенных систем и сетей
- •Раздел 22. Разработка корпоративного web-узла
- •Перечень литературы
- •Перечень основных стандартов в области обеспечения жизненного цикла и качества программных средств
Алгоритмы поиска: последовательный, бинарный, интерполяционный поиск, использование деревьев в задачах поиска; хеширование с открытой и закрытой адресацией; алгоритмы поиска подстроки в строке.
Алгоритм последовательного поиска:
R1: i = 1;
R2: если Ki = K, то УДАЧА;
R3: i = i + 1;
R4: если i <= n, то перейти к шагу R2;
иначе НЕУДАЧА.
Быстрый последовательный поиск:
B1: i = 1, Kn+1 = K;
B2: если Ki = K, то перейти к шагу B4;
B3: i = i + 1; перейти к шагу B2;
B4: если i <= n, то УДАЧА;
иначе НЕУДАЧА.
В этом алгоритме быстрее выполняется самый внутренний цикл
за счет того, что не надо выполнять проверку i <= n.
Бинарный поиск
Если массив упорядочен по возрастанию или убыванию, то можно применить более быстрые методы поиска, такие как, например, бинарный (методом деления пополам).
Интерполяционный поиск
Данный метод, также как и бинарный поиск, требует чтобы массив был упорядочен по возрастанию или убыванию. Работа этого метода также аналогична предыдущему, с той только разницей, что на каждом шаге рассматривается элемент, находящийся не в середине текущей части массива, а в позиции, которая находится от начальной на расстоянии, определяемом по формуле:
P=(r-l)(k-ai)/(ar-ai)
Здесь r и l — соответственно правая и левая граница области поиска, k — искомый элемент, al и ar - соответственно левый и правый элемент области поиска.
Если в дереве между порожденными узлами, имеющими общий исходный, считается существенным их порядок, то дерево называется упорядоченным. В задачах поиска почти всегда рассматриваются упорядоченные деревья.
Упорядоченное дерево, степень которого не больше 2 называется бинарным деревом. Бинарное дерево особенно часто используется при поиске в оперативной памяти. Алгоритм поиска: вначале аргумент поиска сравнивается с ключом, находящимся в корне. Если аргумент совпадает с ключом, поиск закончен, если же не совпадает, то в случае, когда аргумент оказвается меньше ключа, поиск продолжается в левом поддереве, а в случае когда больше ключа - в правом поддереве. Увеличив уровень на 1 повторяют сравнение, считая текущий узел корнем.
В случае открытого хеширования (другое название хеширования цепочками), мы объедением элементы, хешированные в одну и ту же ячейку, в связный список.
Так, идея достаточно проста. Если при добавлении в хеш-таблицу в заданную ячейку мы встречаем ссылку на элемент связного списка, то случается коллизия. Так, мы просто вставляем наш элемент как узел в список. При поиске мы проходим по цепочкам, сравнивая ключи между собой на эквивалентность, пока не доберёмся до нужного. При удалении ситуация такая же.
Хеширование с открытой адресацией
В случае метода открытой адресации (или по-другому: закрытого хеширования) все элементы хранятся непосредственно в хеш-таблице, без использования связанных списков. В отличии от хеширования с цепочками, при использовании метода открытой адресации может возникнуть ситуация, когда хеш-таблица окажется полностью заполненной, так что будет невозможно добавлять в неё новые элементы. Так что при возникновении такой ситуации решением может быть динамическое увеличение размера хеш-таблицы, с одновременной её перестройкой.
поиск подстроки боуера мура
На первом шаге мы строим таблицу смещений для искомого образца. Процесс построения таблицы будет
описан ниже. Далее мы совмещаем начало строки и образца и начинаем проверку с последнего символа
образца. Если последний символ образца и соответствующий ему при наложении символ строки не совпадают,
образец сдвигается относительно строки на величину, полученную из таблицы смещений, и снова проводится
сравнение, начиная с последнего символа образца. Если же символы совпадают, производится сравнение
предпоследнего символа образца и т. д. Если все символы образца совпали с наложенными символами строки,
значит мы нашли подстроку и поиск окончен. Если же какой-то (не последний) символ образца не совпадает с
соответствующим символом строки, мы сдвигаем образец на один символ вправо и снова начинаем проверку с
последнего символа. Весь алгоритм выполняется до тех пор, пока либо не будет найдено вхождение искомого
образца, либо не будет достигнут конец строки.
Величина сдвига в случае несовпадения последнего символа вычисляется исходя из следующих соображений:
сдвиг образца должен быть минимальным, таким, чтобы не пропустить вхождение образца в строке. Если данный
символ строки встречается в образце, мы смещаем образец таким образом, чтобы символ строки совпал с самым
правым вхождением этого символа в образце. Если же образец вообще не содержит этого символа, мы сдвигаем
образец на величину, равную его длине, так что первый символ образца накладывается на следующий за
проверявшимся символ строки. Величина смещения для каждого символа образца зависит только от порядка символов
в образце, поэтому смещения удобно вычислить заранее и хранить в виде одномерного массива, где каждому символу
алфавита соответствует смещение относительно последнего символа образца.
Алгоритм Рабина-Карпа
Идея, предложенная Рабином и Карпом, подразумевает поставить в соответствие каждой строке
некоторое уникальное число, и вместо того чтобы сравнивать сами строки, сравнивать числа, что
намного быстрее. Проблема в том, что искомая строка может быть длинной, строк в тексте тоже
хватает. А так как каждой строке нужно сопоставить уникальное число, то и чисел должно быть
много, а стало быть, числа будут большими (порядка Dm, где D - количество различных
символов), и работать с ними будет так же неудобно. Ниже вы узнаете, как найти выход из этого
положения, а пока смотрите реализацию для текста, состоящего только из цифр, и строки
длиной до 8 символов.
кнута-морриса-пратта
Метод использует предобработку искомой строки, а именно: на ее основе создается так
называемая префикс-функция. Суть этой функции в нахождении для каждой подстроки S[1..i]
строки S наибольшей подстроки S[1..j] (j<i), присутствующей одновременно и в начале, и в конце
подстроки (как префикс и как суффикс). Например, для подстроки abcHelloabc такой подстрокой
является abc (одновременно и префиксом, и суффиксом). Смысл префикс-функции в том, что мы
можем отбросить заведомо неверные варианты, т.е. если при поиске совпала подстрока
abcHelloabc (следующий символ не совпал), то нам имеет смысл продолжать проверку
продолжить поиск уже с четвертого символа (первые три и так совпадут).