1
Алгоритмы обработки строк
Алгоритмы для работы со строками нацелены на поиск заданного образца P в тексте T. Формально задача называется задачей поиска подстрок. Алгоритм должен определить позицию s подстроки P в тексте T.
Позиция может быть допустимой, если : 0 ≤ s ≤ n-m и T[s+1..s+m] = P[1..m]
Задача. Найти подстроку в строке. Поиск подстроки сводится к определению позиции s подстроки P в тексте T.
Текст (S) |
r k l |
|
|
a |
b c c d b f z a |
Длина |
|||
строка |
|
|
cтроки |
||||||
|
|
|
n |
||||||
Подстрока (P) |
|
|
|
|
|
|
Длина |
||
|
|
|
|
|
|
|
|||
|
|
a |
b c |
|
|||||
строка |
|
|
|
подстроки m |
|
||||
|
|
|
|
|
|
|
|
|
Время поиска подстроки при просмотре всей строки
оценивается формулой:
t≈θ((n-m+1)*m)
Более быстрые алгоритмы для поиска подстрок обеспечиваются структурами данных типа таблицы или деревья
Пример_работы_со_строками.doc 2
Логический тип данных
Наименование типа |
Длина |
Логические операции: |
|||||||||
Boolean |
|
1 байт |
|||||||||
ByteBoolean |
1 байт |
not |
|
|
|
|
not b |
||||
and |
|
|
|
|
x and b |
||||||
|
|
|
|
|
|
|
|
|
|||
WordBoolean |
2 байта |
or |
|
|
|
|
x or b |
||||
LongBoolean |
4 байта |
xor |
|
|
|
|
z xor b |
|
|||
|
|||||||||||
Исключающее «ИЛИ» |
|||||||||||
Старшинство операций в |
|||||||||||
Результат равен истине только |
|||||||||||
выражениях, содержащих |
|||||||||||
при истинности одного из |
|||||||||||
операции над разными |
|
||||||||||
|
высказываний |
||||||||||
типами данных: |
|
|
|
Логические поразрядные |
|||||||
1. Унарные |
@, not |
|
|||||||||
|
операции |
||||||||||
2. Мультипликативные: |
|||||||||||
Shl |
|
|
|
|
Сдвиг влево числа |
||||||
*, / , div, mod, and, shl, |
shr |
|
|
|
|
||||||
Shr |
|
|
|
Сдвиг вправо числа |
|||||||
3. Аддитивные: |
|
|
|
|
|
||||||
|
|
|
|
|
|||||||
+, -, or, xor |
|
|
|
Функция odd(x) |
|||||||
4. Отношения: |
|
|
|
b:=odd(x) b равно истине, |
|||||||
as, in, <, <= , > |
, >= |
, = |
, <> |
если x нечетно |
If b then writeln(‘ х нечетное’);
Операторы циклов в языке
ОПЕРАТОРЫ ЦИКЛОВ
Все повторяющие процессы обработки данных оформляются операторами циклов.
Цикл «Пока». While <Условие для выполнения действий> do <действие в цикле> ;
i:=1; |
Цикл «До» |
Циклы с постоянным |
|||
шагом |
|||||
While i <= n do |
Repeat |
||||
For i:=1 to n do |
|||||
begin |
<действия в цикле> |
||||
s[i]:=0; |
Until <условие возврата на |
begin |
|||
……… |
{ шаг +1} |
||||
i:=i+1; |
повторение действий |
||||
end; |
|
|
|||
до получения истинного |
|
|
|||
end; |
|
|
|
||
значения условия > |
For i:=n downto 1 do |
||||
|
|||||
Правила выхода |
i:=1; |
begin |
|
{шаг -1} |
|
из цикла |
Repeat |
……… |
Никаких других |
||
|
s[i] := 0; |
end; |
|||
|
|
изменений |
|||
|
i:=i+1; |
|
|
шага в этой |
|
|
Until i> n; |
|
структуре нет |
Операторы цикла типа For
For
1.Нельзя изменять параметр цикла for внутри цикла
2.Войти в цикл можно только через его заголовок
3.Конец вложенного цикла должен быть ранее внешнего цикла
• Вложенные циклы For i………. do
begin
For j……..do begin
|
……… |
Внутренний |
|
end; |
цикл |
|
|
|
………….. |
|
|
end; |
Внешний цикл |
5
Операторы управления для циклов
Изменение порядка выполнения циклов обеспечивается операторами:
Break; Выполняется немедленный выход из цикла к следующему оператору программы
Continue; Продолжение цикла будет, даже при невыполнении предыдущей итерации цикла
Exit; Немедленный выход из подпрограммы Halt; Завершение программы
Переход по метке |
Goto <Метка> |
Массивы
• Массив – это набор элементов одного типа, доступ к которым обеспечивается по номеру (индексу)
• Описание массива в программе:
type <имя массива> = array <[диапазон индексов]> of <тип элементов массива>;
•Для выбора элемента массива надо указать только его индекс (номер в последовательности значений).
• |
Номер первого элемента |
– Low(<имя переменной массива>) |
||
• |
Номер последнего элемента - High(<имя переменной массива>) |
|||
• |
Длина массива в памяти Length (<имя переменной массива>) |
|||
• |
Многомерный массив – это массив, имеющий несколько |
|||
|
измерений |
|
|
(2 и выше). |
|
|
type <имя массива> = array <[диапазон индексов], … .… <диапазон индексов]> > of <тип элементов массива>;
Объявление массивов
1.Статические массивы
Определение типа:
Type aa =array [1..20] of real;
ss = array [1..60] of string[60]; или
Const n = 30; m =1..10;
type ab = array [1..n] of integer; sb = array [m] of string[30];
dd_ab = array [1..n,1..n] of real; Двумерный массив
Var a:aa; s:ss;a1:ab;sbb:sb;ad:dd_ab;
Begin
a1[i] sbb[k] ad[i,j] i, j, k изменяются от 1 до
n или m
2. Динамические массивы
Определение типа:
Type mas_dyn= array of real; ss=string[60];
mas_ds = array of ss; mas_2d=array of array of real;
Var m_d : mas_dyn; m_s : mas_ds; m_2d: mas_2d;
Begin setlength(m_d,0); setlength(m_2d,10,10);
Выбор элемента массива:
m_d [i] |
m_s[j] |
m_2d[i,j] |
или |
m_d^ [i] |
m_s^[j] |
|
m_2d^[i,j] |
|
Индексы массивов изменяются от 0 до n-1.
Длина массива n=length(m_d);
Физическое представление массивов |
|
||||
1. Статический массив |
|
|
|
||
|
|
i |
|
|
|
a1 |
a2 |
…. |
….. |
an-1 |
an |
n- у статического массива постоянная величина
Вставить новый элемент в массив.. Последовательность действий:
•Проверить возможность добавления элемента массива
•Сместить вправо все элементы после i-ого элемента
•Вставить новый элемент вместо i-ого элемента
•Сохранить новую размерность массива
адрес 2. Динамический массив |
|
||
a0 |
a1 |
i…….. |
an-1 |
• Увеличить n на количество вставляемых значений
• Задать новую длину массива Setlength(a,n);
• Сместить вправо все элементы после i-ого элемента
9
• Вставить новый элемент в динамический массив:
Основные действия с массивами данных
1. Ввод/вывод массивов
2. Поиск заданного значения в массиве
3.Удаление элемента из массива
4.Добавление нового элемента на заданное место
5.Сортировка массива по заданному признаку
Замечание. |
|
|
Массивы одного типа |
|
|
||
|
|
||
|
|
|
можно переприсваивать: |
Type aa=array [1..20] of real; var a, b: aa;
begin
<ввод массива a>
b:=a;
// Получаем копию массива a