path: Главная\Алгоритмы


.:. алгоритм Евклида :.:
.:. эфект развевающегося флага :.:
.:. алгоритмы поиска :.:
.:. алгоритмы сортировки :.:
.:. алгоритмы на каждый день :.:
.:. post scriptum :.:


:.: Алгоритмы Поиска :.:

[1] Для начала самы простой и удобный алгоритм поиска необходимого элемента st в массиве b[]. Основа алгоритма лежит в нехитрой строчке.

while b[i]<>st do inc(i);

А вот и весь алгоритм:

var b: array[1..n] of something;
{n есть число на 1 большее размера массива}
{т.е. если размерность массива 10 то n=11}
    i: integer;
    st: something;
begin
{заполнение массива b}
{считывание образца необходимого элемента в перем. st}
i:=1;
b[n]:= st;
while b[i]<>st do inc(i);
if i=n then {значит элемента нет}
else {элемент найден, его номер=i};
end.

[2] Алгоритм поиска максимального (минимального) элемента в массиве и порядкового номера этого элемента.

var b: array[1..n] of something;
    k, i: integer;
begin
k:=1;
for i:=1 to n do
   if b[i]>b[k] then k:= i;
end.

Теперь при помощи команды writeln(b[k]) мы получим наибольший элемент массива, где k - его порядковый номер в этом массиве.

[3] Сокращение области поиска или бинарный (двоичный) поиск. Основная идея заключается в следуещем. Пусть массив отсортирован в порядке убывания. Находим средний элемент массива. b[m], где m=(n+1) div 2 и сравниваем его с элементом x. Если средний элемент равен x то поиск заканчивается. Если он меньше (больше) х то вес элементы с индексом большими (меньшими) или равными m можно не рассматривать. При выполнении данного алгоритма придется на каждом шаге пересчитывать границы поиска. Так на первом шаге левая граница l=1, правая r=n. На втором шаге либо левая, либо правая границапоменяет свое значение.

var b: array[1..n] of something;
    l, r, m: integer;
    p: boolean;
    x: something;
begin
l:=1;
r:=n;
while (l<=r) and (p=false) do begin
   m:= (r+l) div 2;
   if b[m] = x then p:= true else
      if b[m]>x then l:=m+1 else r:= m-1;
   end;
end.


:.: Алгоритмы на Каждый День :.:

Q1: Как поменять местами два элемента массива не используя промежуточных данных?
A: Данный пример подходит только для элементов типа integer (byte, word). Но при небольшой хитрости может быть легко модифицирован под char (string).
a[1]:= a[1] + b[1];
b[1]:= a[1] - b[1];
a[1]:= a[1] - b[1];


:.: Post Scriptum :.:

Почти все, что Вы здесь прочли является авторским материалом и принадлежит Timon PC (c). Так что если Вы захотите разместить данный материал на своем сайте или в любом другом массовом проекте, то просьба оповестить меня и только с моего согласия приступать к дальнейшим действиям. К тому же я и совсем не жадный (всегда можно договориться) :-) Большое спасибо!



MAFIA's Top100 Rambler's Top100 Rambler's Top100