- •Передачу параметров в функцию по значению, а не по ссылке (при этом передача по ссылке эмулируется с помощью указателей);
- •Области действия имён; (область видимости переменной).
- •Достоинства:
- •Представление целых чисел в эвм
- •Основные типы данных, операции над ними.
- •Операции
- •Преобразование типов
- •Особенности операций для вещественных чисел
- •3.1. Операторы и блоки.
- •3.2. Оператор if – else
- •3.3. Конструкция else-if.
- •3.4. Оператор switch
- •3.5. Циклы while и for
- •3.6. Цикл do-while
- •3.7. Операторы break и continue
- •3.8. Оператор goto и метки
- •3.9. Оператор return
- •Инвариант
- •Указатели
- •Массивы
- •Связь между указателями и массивами
- •Представление в эвм
- •Создание указателя на массив
- •Инициализация массивов
- •Операции над указателями
- •Замечание! 2 указателя нельзя суммировать, но можно прибавлять константу. Сравнивать допустимо только с указателями того же типа или с null
- •Метод барьера в линейном поиске
- •Метод барьера при быстрой сортировке массива
- •Сортировка методом вставки. В отсортированной части массива последний элемент – барьер.
- •Процедуры
- •Локальные и глобальные переменные
- •Локальные переменные
- •Глобальные переменные
- •Средний и наихудший случай
- •Дополнительно (то же самое)
- •Анализ эффективности алгоритмов не должен зависеть от:
- •Временная сложность алгоритма
- •Некоторые свойства временной сложности алгоритма (функции f(n) )
- •Характеристики рекурсии
- •Виды рекурсии
- •Когда не нужно применять рекурсию
- •Применение эвристик.
- •Метод ветвей и границ (доп. Из Wikipedia)
- •Алгоритм Неймана.
- •Линейный конгруэнтный метод
- •Выбор параметров, выбор модуля и множителя.
- •Сдвиг на несколько символов: Если не совпадает , то сдвигаем образ вправо до последнего его стоп-символа. Если «стоп-символа» вообще нет в образе, то образ смещается за этот символ.
- •Вопросы на экзамен по информатике:
- •Перевести отрицательное целое число (он любое может назвать) в дополнительный код.
- •Есть ли смысл применять метод барьера в поиске подстроки в строке?
- •Задачи на экзамене:
- •Задача о Ханойских башнях
- •Бинарный поиск элемента в массиве
- •Сумма цифр в числе
- •Число различных элементов в символьном массиве
- •Сгенерировать все перестановки в целочисленном массиве (Билет 1).
- •Функция, возвращающая I и j такие, чтобы сумма эл-тов в I-ой строке равнялась сумме в j-ом столбце.
- •Есть одномерный массив целых чисел и нужно построить функцию, получающую на вход вещественное число X и возвращающую индекс элемента, который ближе всего к этому числу.
- •Функция strcpy (char *s1, char *s2) , билет 12.
- •Реализация strcat(); Билет 7.
- •Билет 5. Функция, выдаёт частное и остаток от деления X на y, нельзя пользоваться / и % .
- •Метод генерации случайной перестановки ( Тасование Фишера-Йетса).(не ок)
Сканирование слева направо, сравнение справа налево. Совмещается начало текста (строки) и шаблона, проверка начинается с последнего символа шаблона. Если символы совпадают, производится сравнение предпоследнего символа шаблона и т. д. Если все символы шаблона совпали с наложенными символами строки, значит, подстрока найдена, и поиск окончен. Если же какой-то символ шаблона не совпадает с соответствующим символом строки, шаблон сдвигается на несколько символов вправо, и проверка снова начинается с последнего символа.
Сдвиг на несколько символов: Если не совпадает , то сдвигаем образ вправо до последнего его стоп-символа. Если «стоп-символа» вообще нет в образе, то образ смещается за этот символ.
Если при сравнении строки и образа совпало 1 или более символов – сдвиг до ближайшего повторяющегося символа. Совпал символ «А» - сдвиг до ближайшего «А».
Для пропуска заведомо неверных вариантов строится таблица сдвигов, основанная на символах шаблона. Величина сдвига определяется следующей формулой:
Алгоритм:
int bm(char s[N], char p[M])
{ int d[R]; int I,j,k;
for (j=0; j<R; j++) d[j]=M;
for (j=0;j<M-1;j++) d[p[j]]=M-j-1;
do
{ j=M; k=i;
do { k--; j--;
} while ((j>=0)&&(p[j]==s[k]));
if (j>=0) i + = d[s[i-1]]; // cдвиг позиции
} while ((j>=0)&&(i<N));
i-=M;
// return(i-M); }
Величина смещения для каждого символа образца зависит только от порядка символов в образце, поэтому смещения удобно вычислить заранее и хранить в виде одномерного массива, где каждому символу алфавита соответствует смещение относительно последнего символа образца.
Анализ БМ:
Cmin = 1*i/M+M - последний символ образа каждый раз попадает на несовпадающий символ текста.
Cmax = i*(М-1)+M – подстрока и образец очень похожи
Ccp
=
Будем считать, что в таблице сдвигов нет повторяющихся символов
В среднем случае сдвиг происходит приблизительно на максимальную длину М. Чем больше М и чем больше R, тем быстрее будет происходить поиск. Но на коротких текстах выигрыш может не оправдывать предварительных вычислений.
Алгоритм КМП
После частичного совпадения начальной части образа W с соответствующими символами строки Т мы фактически знаем пройденную часть строки и может «вычислить» некоторые сведения (на основе самого образа W), с помощью которых потом быстро продвинемся по тексту. Идея КМП-поиска – при каждом несовпадении двух символов текста и образа образ сдвигается на все пройденное расстояние, так как меньшие сдвиги не могут привести к полному совпадению. Особенности КМП-поиска: 1. требуется порядка (N+M) сравнений символов для получения результата; 2. схема КМП-поиска дает подлинный выигрыш только тогда, когда неудаче предшествовало некоторое число совпадений. Лишь в этом случае образ сдвигается более чем на единицу. К несчастью совпадения встречаются значительно реже чем несовпадения. Поэтому выигрыш от КМП-поиска в большинстве случаев текстов весьма незначителен.
Вопросы на экзамен по информатике:
Есть массив строк. Нужно отсортировать их по первой букве (только по первой! на остальные не обращаем внимания) в алфавитном порядке. Какой из трёх алгоритмов ПРОСТОЙ сортировки нужно для этого выбрать?
Решение: сначала выделим различия между сортировкой массива из N чисел и сортировкой массива из N строк. Количество сравнений не изменяется. А вот количество перестановок элементов очень сильно увеличивается, т.к. надо поменять местами не два числа, а две строки, то есть фактически два массива чисел. Поэтому нужно выбрать сортировку с минимальным количеством перестановок. Это сортировка методом выбора максимума (минимума) ( сортировка выбором).
