Re: Задача 1
От: Leonidze  
Дата: 29.11.07 05:29
Оценка:
Здравствуйте, ukrsonic, Вы писали:

...
алгоритм деления пополам — двоичный поиск в отсортированном массиве. позволяет снизить число сравнений до O(log(N)). Так как ищется номер билета в массиве a — надо сначала отсортировать массив a любым способом (не забывая что A(i) связано с P(i)). двоичный поиск в классическом варианте будет таким:

type 
  arr_i: array of integer;

function binary_search(a:arr_i;value:integer):integer;
var
  l,r,x:cardinal;
begin
  result := -1;
  l:=low(a);
  r:=high(a);
  while l<r do
    begin
      x := (l+r) shr 1; // div 2
      if a[x]=value then
        begin
          result := x;
          break;
        end
      else if a[x]<value then l:=x+1;
      else r:=x-1;      
    end;
  while (result>0) and (a[result-1]=value) do dec(result);
end;


дальше что на си что на пхп будет примерно также как на дельфи. удачи.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.