Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.07.11;
Скачать: CL | DM;

Вниз

Использование BinarySearch в DeCAL?   Найти похожие ветки 

 
Erik1 ©   (2005-06-13 17:13) [0]

Вопрос работает ли данная функция? У меня есть контейнер из 3 элементов функция сразвенеия выгладит так:
function ComparatorSID(ptr: Pointer; const obj1, obj2: DObject): Integer;
begin
Result := TRaw(obj1.VObject).Element.ID - obj2.VInteger;
end;
Провожу тест:
iter := BinarySearch(Raw.Container, [240851208]);
if atEnd(iter) then
 sysutils.Beep;
iter := BinarySearch(Raw.Container, [241048155]);
if atEnd(iter) then
 sysutils.Beep;
iter := BinarySearch(Raw.Container, [241117550]);
if atEnd(iter) then
 sysutils.Beep; //вот здесь ненаходит.

Вобщем неможет она найти последний элемент!


 
Erik1 ©   (2005-06-13 17:39) [1]

Вот аггоритм поиска:
function _binarySearchInWith(_start, _end : DIterator; compare : DComparator; const obj : DObject) : DIterator;
var dist, comp : Integer;
   last : DIterator;
begin

assert(diRandom in _start.flags, "Binary search only on random access iterators");
last := _end;
 result := last;

 repeat
   dist := distance(_start, _end) div 2;
   if dist <= 1 then //кажется в этом блоке ошибка?
     begin
      if compare(getRef(_start)^, obj) = 0 then
        result := _start
       else if compare(getRef(advanceF(_start))^, obj) = 0 then
        result := advanceF(_start)
       else
        result := last;
       break;
     end;
   result := advanceByF(_start, dist);
   comp := compare(getRef(result)^, obj);
   if comp = 0 then
     break
   else if comp < 0 then
     _start := result
   else
     _end := advanceF(result)
 until false;
end;
Переменая dist будет равна 1 при 2 и 3 элементах в контейнере.


 
Erik1 ©   (2005-06-13 19:19) [2]

Я решил, что в библиотеке есть ошибка и переписал алгоритм. :(



Страницы: 1 вся ветка

Текущий архив: 2005.07.11;
Скачать: CL | DM;

Наверх




Память: 0.44 MB
Время: 0.032 c
8-1109833197
seregka
2005-03-03 09:59
2005.07.11
Слайд-шоу - проблема больших файлов


14-1118557681
Fl@sh
2005-06-12 10:28
2005.07.11
UserGate &amp; VPN


14-1118834936
DVYdm
2005-06-15 15:28
2005.07.11
настройка Apache Server


14-1118848869
antonioxxx
2005-06-15 19:21
2005.07.11
Компонент для LPT


6-1112960035
}|{yk
2005-04-08 15:33
2005.07.11
Проблема с устновкой Indy 10





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский