Вверх ↑
Ответов: 9906
Рейтинг: 351
#1: 2017-05-26 23:17:52 ЛС | профиль | цитата
-= DriveR =- писал(а):
но хотелось бы понять что вы сказали.

Вот спрашивается, чего тут непонятного:
procedure THiAsmClass.doCalc;
var i,j,k,l:integer;
    ss:string;
begin
  ss := ToString(_Data);
  _hi_CreateEvent(_Data, @onIs, ss);
  i := 0; j := _Numb-1;
  k := StrComp(pchar(_Arr[i]), pchar(ss));
  l := StrComp(pchar(_Arr[j]), pchar(ss));
  if (k=0)or(l=0) then exit;
  if (k<0)and(l>0) then while (j-i)>1 do begin
    k := (i+j) div 2;
    l := StrComp(pchar(_Arr[k]), pchar(ss));
    if l=0 then exit;
    if l>0 then j := k
    else i := k;
  end;
  _hi_CreateEvent(_Data, @onNo, ss);
end;
Пять простеньких строк внутри цикла ......

Каждое сравнение уменьшает область (между i и j) поиска слова в отсортированном массиве в ДВА РАЗА.
Поэтому, сколько надо сделать сравнений для массива в 1000 слов ??? Десять.
А для массива в 2000 слов -- одиннадцать.
А для массива в 4000 слов -- двенадцать.
И т.д.. Это и есть логарифмическая асимптотика.

А сколько надо сделать сравнений для массива в 1000 слов полным перебором ???
Разницу чувствуете, или как
карма: 9

0
Редактировалось 3 раз(а), последний 2017-05-26 23:28:03