- •Вопрос 2. Спецификация, представление, реализация абстрактных типов данных.
- •Вопрос 3. Многомашинные вс. Реализация на основе ес эвм. Кластерные вс.
- •Типы кластеров:
- •Вопрос 2. Линейные структуры данных: стек, очередь, дек
- •Вопрос 3. Сравнительный анализ и основные компоненты инструментальных среды разработки пользовательских интерфейсов. Классификация элементов пользовательского интерфейса
- •Вопрос 1. Конкретные реализации языков функционального программирования: язык программирования Лисп, основные объекты, примитивы, списки, правила составления программ.
- •Вопрос 2. Семантическая теория программ. Вычислимость и разрешимость
- •Вопрос 3. Формальные методы описания диалоговых систем. Законы Фитса и Хика.
- •Вопрос 1. Основные конструкции логической программы: факты, правила, запросы, логические переменные. Операционная и декларативная семантика логических программ.
- •1. 5. Декларативный и процедурный смысл программ
- •Вопрос 2. Интерфейсы. Способы согласования аппаратных структур. Организация асинхронных интерфейсов
- •Элементы процесса как поведенческой категории :
- •Дескриптивный асинхронный процесс (dp)
- •Асинхронный процесс (ap)
- •Инициаторы
- •Вопрос 3. Эргономика пользовательского интерфейса. Критерии эргономичности интерфейса. Человеческие ошибки. Методы предотвращения ошибок. Снижение чувствительности системы к ошибкам.
- •Типы ошибок
- •Методы предотвращения ошибок
- •Как избежать сообщений об ошибках
- •Вопрос 1. Интерпретация и корректность логических программ. Абстрактный интерпретатор, значение логической программы, вычислительная модель
- •Вопрос 2. Порядковые статистики (Гулаков сказал что его не будет)
- •Субъективная удовлетворенность
- •Типичные интерфейсные ошибки отечественного по
- •Программа перегружена элементами управления
- •Терминология не адекватна знаниям пользователя о системе
- •От пользователя постоянно требуется дополнительная информация
- •Вопрос 1. Программирование баз данных. Динамическая база данных. Добавление и удаление фактов в процессе работы программы.
- •Вопрос 2. Поиск и кодирование (сжатие) данных, кодовые деревья, оптимальные префиксные коды
- •Вопрос 1. Рекурсивное программирование на логическом языке. Рекурсивные структуры данных – списки. Объявление списков. Составные списки. Голова и хвост списка. Примеры работы со списками.
- •Вопрос 2. Бинарный поиск, хеширование
- •Вопрос 3. Тестирование и отладка программного обеспечения. Структурное и функциональное тестирование. Особенности тестирования объектно-ориентированного по. Автоматизация процесса тестирования.
- •Вопрос1. Вычислительная модель программы на логическом языке. Согласование целевых утверждений. Сопоставление и унификация. Детерминизм.
- •Вопрос 2. Понятие выполнения сети. Свойства сети (устойчивость, безопасность, консервативность).
- •Вопрос 3. Автоматизация проектирования программного обеспечения на базе case-технологий. Принципы построения и т.Д.
- •Вопрос 1. Множественные выражения Программирование второго порядка Недетерминированное программирование
- •Вопрос 2. Нелинейные структуры данных: иерархические списки, деревья и леса, бинарные деревья
- •Вопрос 1. Вне логические предикаты. Ввод-вывод. Доступ к программам и обработка программ. Металогические предикаты. Сравнение не основных термов.
- •Вопрос 2. Алгоритмы сортировки
- •Сортировка разделением (Quicksort)
- •Вопрос 1. Constraint–Пролог: операционная семантика обобщение механизма унификации, понятие constraint'а. Операционная модель Constraint-пролоГа.
- •Вопрос 2. Нелинейные структуры: обходы деревьев
- •Вопрос 3. Качество по. Критерии качества: сложность, корректность, надежность, трудоемкость. Методика оценки качества по. Метрические особенности объектно-ориентированных пс. Сертификация по
- •Вопрос 1. Cancelled мистером г.
- •Вопрос 2. Стандартные схемы программ. Методы формальной спецификации и верификации.
- •Вопрос 1. Использование деревьев в задачах поиска: бинарные деревья поиска, случайные, оптимальные, сбалансированные по высоте и рандомизированные деревья поиска
- •. Деревья цифрового поиска
- •Вопрос 2. Определение асинхронного процесса как описания модели вычислительного процесса. Глобальные свойства – асинхронность, недетерминированность, параллельность.
- •1. Задачи сортировки; внутренняя и внешняя сортировка
- •2. Подклассы асинхронного процесса. Эффективный асинхронный процесс
- •Длительность реакции системы
- •Субъективное восприятие скорости работы
- •Приемы для уменьшения субъективного восприятия
- •1. Оптимальная сортировка.
- •2. Конвейерный процесс. Автономный процесс. Асинхронный процесс как метамодель.
- •Непосредственное манипулирование
- •Потеря фокуса внимания (прерывание)
- •Ограничение принятия решений
- •1. Анализ сложности и эффективности алгоритмов поиска и сортировки.
- •2. Классификация сетей (ординарные, автоматные, маркированный граф).
- •Понятность системы
- •Ментальная модель
- •Метафора
- •Аффорданс
- •Стандарт
- •1. Файлы: организация и обработка, представление деревьями: b-деревья.
- •2. Сетевое представление параллельных процессов. Области применения сетей Петри
- •3. Основы теории формальных языков и грамматик. Основные понятия и определения. Операции над языками. Классификация формальных языков и грамматик по порождающей способности
- •1. Алгоритмы на графах: представления графов, схемы поиска в глубину и ширину, минимальное остовное дерево, кратчайшие пути.
- •2.1.Поиск в глубину
- •2.2 Поиск в ширину.
- •2. Протоколы взаимодействия объектов вычислительных структур. Понятие протокола.
- •3. Вывод контекстно-свободных (кс) – грамматик и правила построения дерева вывода. Синтаксический разбор. Способы задания схем грамматик. Форма Бэкуса-Наура.
- •1. Теория сложности алгоритмов: np-сложные и труднорешаемые задачи.
- •2. Недетерминированные конечные автоматы. Конечные преобразователи и переводы. Преобразование некоторых грамматик к автоматному виду.
- •3. Объектно-ориентированное проектирование. Принципы проектирования. Схемы, диаграммы, инструменты.
- •1. Детерминированные конечные автоматы. Эквивалентные состояния и автоматы.
- •2. Синтаксический анализ. Метод оперативного предшествования. Восходящие и нисходящие методы синтаксического анализа.
- •2. Жизненный цикл программного обеспечения. Структура жизненного цикла согласно международного стандарта.
- •1. Нисходящие распознаватели. Ll(k) – грамматики. Построение детерминированного нисходящего распознавателя.
- •2. Параллельная обработка как основа высокопроизводительных вычислений. Уровни организации параллелизма: уровень заданий, программ и команд. Системы (языки) параллельного программирования.
- •1. Восходящие распознаватели. Lr(k) грамматики. Построение грамматики.
- •2. Понятие архитектуры вычислительной системы (вс). Архитектура как набор компонент и как система уровневых интерфейсов. Основные аппаратные и программные элементы вс.
- •1.1. Архитектура как набор взаимодействующих компонент
- •1.2. Архитектура как интерфейс между уровнями физической системы
- •1. Магазинные преобразователи. Определение магазинного преобразователя. Перевод, определяемый преобразователем.
- •2. Архитектура системы команд. Микропроцессоры (мп) с полным (cisc) и сокращённых (risc) набором команд. Основные принципы risc- архитектуры. Организация risc мп Alpha 21x64 фирмы dec.
- •Особенности архитектуры Alpha компании dec
- •1. Описание перевода или трансляции. Синтаксически-управляемые (су) – схемы.
- •2. Основные идеи объектно-ориентированных языков программирования. Создание абстрактных типов данных. Инкапсуляция. Полиморфизм. Наследование.
- •3. Развитие архитектур современных мп. Конвейеризация и динамическое выполнение потока команд. Суперскалярность. Архитектура epic мп Intel itanium.
- •1. Транслирующие грамматики. Построение транслирующей грамматики по су-схеме. Атрибутные транслирующие грамматики.
- •3. Векторные и векторно-конвейерные вс. Структура векторного процессора. Матричные вс.
- •1. Трансляторы, интерпретаторы и компиляторы. Стадии работы компиляторы. Лексический анализ.
- •3. Системы массовой параллельной обработки (мрр). Супер эвм фирмы sgi - Cray t3e(t3d) -1200.
- •2. Классификация и типы вс. Многомашинные и многопроцессорные вс. Представление вс на основе распределения потоков команд и данных (классификация Флинна)
Вопрос 2. Бинарный поиск, хеширование
Внимание! Гулаков сказал что различие бинарного поиска от поиска деления–пополам в том, что бинарный применятся на деревьях, а делением пополам в массивах.
Наиболее эффективным методом поиска в упорядоченном массиве без использования вспомогательных индексов или таблиц является бинарный поиск. При поиске значения Х в упорядоченном по возрастанию значений массиве A(1)<A(2)<,..,Х, все элементы, имеющие номера с S по n также больше Х в силу упорядоченности массива по возрастанию значений. Поэтому для дальнейшего поиска половину значений массива можно исключить из рассмотрения. В первом случае - левую, во втором случае - правую половину.
Упрощенно этот метод состоит в том, что аргумент сравнивается с ключом среднего элемента в таблице . Если они равны , то поиск успешно закончился . В противном случае поиск должен быть осуществлен в верхней или нижней таблице аналогично.
Каждое сравнение в бинарном поиске уменьшает число возможных кандидатов в два раза . Следовательно максимальное число сравнений ключа равно log2 n. Бинарный поиск может быть использован совместно с индексно- последовательной структурой данных. К сожалению, алгоритм бинарного поиска может быть использован только для упорядоченного массива.
Х
еширование В
идеале желательна такая организация
таблицы, при которой бы отсутствовали
лишние сравнения. Наиболее эффективным
способом организации такой таблицы
является массив.
Поэтому необходим некоторый метод преобразования ключа в какое-либо целое число внутри ограниченного диапазона.
В идеале в одно и то же число не должно преобразовыватся два различных ключа.
К сожалению, такого идеального метода не существует. Попытаемся разработать методы, которые приближаются к идеальным и определить действия, когда идеальный случай не достигается.
Функция, которая трансформирует ключ в некоторый индекс в таблице, называется хеш-функцией.
Если h является некоторой хеш функцией, а key-некоторый ключ, то h(key) называется хеш функцией от ключа key и является индексом, по которому должна быть помещена запись с ключом key. Если мы обозначим остаток от деления x на y как mod(x,y), то хеш функция для вышеприведенного примера есть h(key)=mod(key,1000). Желательно иметь таблицу размером больше числа вставляемых записей.
Этот метод имеет один недостаток. Если существуют два ключа K1 и К2, такие что h(K1)=h(K2), то при введении записей с этими ключами, они претендуют на одно и тоже место. Такая ситуация называется коллизией при хешировании или столкновением.
Хорошей хеш функцией является такая функция, которая минимизирует коллизии и распределяет записи равномерно по всей таблице. Поэтому и желательно иметь массив с размером больше, чем число реальных записей. Возникает компромисс между временем и пространством. Наличие пустых мест в массиве не эффективно с позиций использования памяти, но уменьшается время на разрешение коллизий при хешировании.
Самым простым методом разрешения коллизий при хешировании является помещение данной записи в следующую свободную позицию в массиве. Этот метод называется линейным обрабатыванием. Он является примером некоторого общего метода разрешения коллизий при хешировании, который называется повторным хешированием или открытой адресацией.
В общем случае функция повторного хеширования rh воспринимает один индекс в массиве и выдает другой индекс. Если ячейка массива h(key) уже занята, то применяется функция rh к значению h(key) для поиска другой ячейки. Если ячейка rh(h(key)) занята, то хеширование повторяется rh(rh(h(key))). Этот процесс повторяется до тех пор пока не будет найдена пустая ячейка.
Может случится, что цикл повторного хеширования будет выполнятся бесконечно. Возможны две причины : 1) таблица может быть полной, т.е. вставить новые записи невозможно; 2) зацикливание возможно при наличии пустых позиций из-за плохой хеш функции (например она работает только с четными позициями).
Свойство хорошей функции повторного хеширования состоит в том, что для любого индекса i последовательно выполняемые повторные хеширования rh(i), rh(rh(i)), ... располагаются на максимально возможное число целых чисел от 0 до m-1(m- число элементов в таблице).Функция повторного хеширования rh(i)=mod (i+1,1000) обладает этим свойством. Любая функция rh(i)=mod(i+c, m), где константа c и m являются взаимно простыми числами выдает последовательные значения, распространяющиеся на всю таблицу.
Имеется другая мера пригодности функции хеширования, связанная с понятием скучивания. Скучивание- это явление, при котором два ключа, которые хешируются в разные значения, при повторном хешировании конкурируют друг с другом.
Одним из способов исключения скучивания является использование двойного хеширования, которое состоит в использовании двух хеш-функций h1(key) и h2(key).
Функция h1(key), называется первичной хеш-функцией используется первой при определении той позиции, в которую должна быть помещена запись. Если эта позиция занята, то последовательно используется функция повторного хеширования rh(i)=mod(i+h2(key), m) до тех пор, пока не будет найдена пустая позиция.
В оптимальном случае функция h1 и h2 должны быть выбраны так, чтобы они выполняли хеширование и повторное хеширование равномерно в интервале от 0 до m-1, а также минимизировали скучивание.
Другой подход заключается в том, чтобы сделать функцию повторного хеширования зависящей от числа раз, которые эта функция применяется к некоторому конкретному значению хеширования.
В этом случае rh является некоторой функцией двух аргументов.
Функция rh(i,j) выполняет повторное хеширование целого числа i, если для данного ключа повторное хеширование выполняется j-тый раз.
Хорошая хеш функция должна создавать как можно меньше коллизий при хешировании.
Наиболее известная хеш функция использует метод деления, при котором некоторый целый ключ делится на размер таблицы и остаток от деления берется в качестве значения хеш функции. Эта функция обозначается h(key)=mod(key, m). Наилучшие результаты для метода деления получаются тогда, когда размер таблицы m является простым числом. Другой метод известен как метод середины квадрата : ключ умножается сам на себя и в качестве индекса используется несколько цифр этого квадрата. Другой метод- метод свертки, при котором ключ разбивается на несколько сегментов, над которыми выполняются операции сложения или нетождественности для формирования хеш функций.
Операция нетождественности двух разрядов дает 1, если значения этих двух разрядов различны, и 0, если значения их равны(логическое вычитание).
