Главная страница
    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
Время: 1.455 c
1-1118357250
Сергей1
2005-06-10 02:47
2005.07.11
Работа с BitMap


1-1119345119
MadGhost
2005-06-21 13:11
2005.07.11
динамическое создание линии...


4-1116186014
Gnut
2005-05-15 23:40
2005.07.11
Обои на раб. стол.


1-1119593595
webpauk
2005-06-24 10:13
2005.07.11
Преобразование


14-1118732272
reticon
2005-06-14 10:57
2005.07.11
Не резольвятся адреса при пинге....





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский