- •1. Обработка строк
- •1.1 Функции обработки строк
- •5. Нахождение подстроки в строке.
- •6. Сравнение строк.
- •Вопросы по теме
- •3.5 Метод вставок
- •3.6 Древовидная сортировка
- •3.7 Внешняя сортировка
- •3.8 Факторы, учитываемые при выборе метода сортировки.
- •Вопросы по теме
- •4. Поиск информации
- •4.1 Основные принципы информационного поиска.
- •4.2. Логика и стратегия поиска.
- •4.3. Последовательный поиск
- •4.4. Ускоренные методы поиска
- •4.5. Блочный поиск
- •4.6. Поиск по двоичному дереву
- •4.7. Поиск с использованием прямого доступа к данным. Хеширование
- •4.8. Многоаспектный поиск
- •Вопросы по теме
- •5. Численные методы. Оптимизация функции одного аргумента
- •5.1. Методы исключения интервалов
- •5.2. Метод деления отрезка пополам (метод дихотомии)
- •5.3. Метод Фибоначчи.
- •5.4. Метод «золотого сечения»
- •Вопросы по теме
- •6. Генерация псевдослучайной последовательности.
- •6.1. Метод средних квадратов
- •6.2. Мультипликативный метод
- •Гост-алгоритм
- •7.2. Компрессия данных Эффективное кодирование
- •Код Шеннона-Фано
- •Код Хаффмана
- •7.3. Кодирование информации при передаче по каналу с помехами
- •Вопросы по теме
- •8. Базовые алгоритмы двухмерной графики
- •Вопросы по теме
1. Обработка строк
Строка обычно представляет собой особый вид информации, которая хранится в виде вектора из элементов типа "символ" и рассматривается как единое целое. Для хранения символа используется либо 1 байт, либо 2 байта. Над элементами строки определены те же операции, что и над символами. Если в языке программирования выделается понятие строки, то обычно в нем предусмотрены дополнения, которые отличают строку от вектора символов, при этом используется один из двух способов представления строки:
1. вектор символов дополняется специальным символом, который является признаком конца строки. В Си - это символ с кодом 0;
2. В строке вместе с символами храниться особый элемент, значение которого определяет длину строки. Например, в Pascal - это символ с индексом 0, код которого равен числу символов в строке. Т.о. строковый тип в Pascal позволяет хранить строки длиной от 0 до 255 символов, которые занимают от 1 до 256 байт.
Можно сказать, что строка - вектор символов плюс информация о количестве символов, хранимая либо явно, либо с помощью особого признака – символа,отличного от всех возможных символов, использующихся в данном языке программирования.
1.1 Функции обработки строк
1. Создание строки.
Выделяется память в размере длины строки плюс 1. Затем посимвольно инициализируются элементы строки, и в конце записывается признак конца строки.
2. Тестирование элементов строки.
Обычно требуется определить, является элемент строки буквой, цифрой, разделителем, управляющим символом. Для этого в цикле просматриваются элементы строки до тех пор, пока не будет встречен символ конца строки.
3. Длина строки.
Если форма хранения строки предполагает наличие ее длины, то необходимо считать длину. В Pascal’е необходимо обратиться к элементу с индексом 0.
В Си:
char *S;
l=0;
while(*S++)l++;
4. Конкатенация (сцепление) строк.
Операндами этой функции являются 2 строки. Результатом является 1 строка, в которой последовательно записана первая строка без признака конца строки и вторая строка.
Алгоритм:
Отводится память l1+l2+1, где l1, l2– длины 1 и 2 строк.
Используется 2 счетчика:
1 – для индекса результата
2 – для индексов исходных строк
Организуется два цикла:
1 – с количеством итераций l1
2 – с количеством итераций l2+1
В каждом из циклов начальное значение 2-го счетчика равно 0, значение 1 счетчика обнуляется перед первым циклом. В каждом из циклов значение счетчика увеличивается на один. В теле цикла элементу строки результата присваивается значение исходной строки.
5. Нахождение подстроки в строке.
Аргументы: две строки; возвращаемое значение: 0 – вторая строка не встречается в первой, либо номер символа, начиная с которого вторая строка расположена в первой.
Алгоритм:
Заводится два счетчика. Первый – от номера первого элемента первой строки до длины первой строки, второй – до длины второй строки Для каждого значения первого счетчика второй счетчик в сумме с первым дает смещение в первой строке и используется как номер элемента второй строки. Строки поэлементно сравниваются. Если определено несовпадение, внутренний цикл прерывается. Если внутренний цикл пройден полностью, возвращается результат, сообщающий об отсутствии подстроки в строке.
int i,j,A;
#define N 7
#define M 4
char x[M], y[N];
i=0;
do{
j=0;
do{
A=x[j]==y[j+i];
j++;
}
while(A&&(j<M));
if(j==M)
return i;
i++;
}
while(!A&&(i<N-M));
return -1;