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

Вниз

Matrix Reloading Alpha :)   Найти похожие ветки 

 
Loginov Dmitry ©   (2006-01-06 10:48) [40]


> Думаю примерно так же как [36]


На самом деле вопрос для меня очень важен. Поспорил с приятелем на бутылку пива, что матрикс включат в состав Дельфи. Ну что мне теперь, на пиво раскошеливаться что ли?


 
Loginov Dmitry ©   (2006-01-06 11:58) [41]


> Zeqfreed ©   (05.01.06 22:09) [32]


Хэш - это здорово. С ним поиск раз в 8 быстрее работает. Однако на 1000 элементов бывает до 20 одинаковых хэшей, причем все значения хэшей распределыны гдето в интервале 0..50. Как можно уменьший число коллизий (для вычисления хэшей я воспользовался предложенной вами формулой)?


 
Sandman29 ©   (2006-01-06 12:00) [42]

Loginov Dmitry ©   (06.01.06 10:48) [40]

Если в условиях спора не указаны ни время, ни версия Дельфи, то Вы в принципе проиграть не можете :)


 
Джо ©   (2006-01-06 14:07) [43]

> [40] Loginov Dmitry ©

В состав Делфи — это вряд ли. А вот в состав дистрибутива на их диск Borland Delphi Partner CD вполне реально, туда всякое попадает.


 
Loginov Dmitry ©   (2006-01-06 15:27) [44]


> Zeqfreed ©   (05.01.06 22:09) [32]



> Fenik ©   (05.01.06 23:44) [35]


Ну все, вроде красоту навел. На сайте - обновленная версия.


> Sandman29 ©   (06.01.06 12:00) [42]

Так значит я выиграю? :))


> Джо ©   (06.01.06 14:07) [43]
>
> > [40] Loginov Dmitry ©
>
> В состав Делфи — это вряд ли. А вот в состав дистрибутива
> на их диск Borland Delphi Partner CD вполне реально, туда
> всякое попадает.


Здорово!!! А чуть поподробнее можно?


 
Sandman29 ©   (2006-01-06 15:32) [45]

Loginov Dmitry ©   (06.01.06 15:27) [44]

Необязательно. Может получиться и ничья. Но Вы не можете проиграть, а соответственно он не может выиграть.


 
Игорь Шевченко ©   (2006-01-06 15:45) [46]

Дети Ивана Кулибина


 
Fenik ©   (2006-01-06 16:56) [47]

> Ну все, вроде красоту навел. На сайте - обновленная версия.

> begin
>  C := GetSize(Name) - 1;
>  Adr := GetAddress(Name);
>  MinVal := Real(Pointer(Adr)^);
>  MaxVal := Real(Pointer(Adr)^);

>  for I := C downto 0 do
>  begin
>    R := Real(Pointer(Adr + (I shl 3))^);  
>    if R > MaxVal then MaxVal := R else
>      if R < MinVal then MinVal := R;
>  end;
>  if MinVal > MaxVal then MinVal := MaxVal;  
>end;

Нет, так точно работать не будет (смотри как адрес считается) :))
Законченный вариант, похоже будет таким:

procedure TWorkspace.GetMinMax(Name: string; var MinVal, MaxVal: Real);
var
 I, C, Adr: Integer;
 R: Real;
begin
  Adr := GetAddress(Name);
  MinVal := Real(Pointer(Adr)^);
  MaxVal := MinVal;
  for I := GetSize(Name) downto 2 do
  begin
    Inc(Adr, 8);
    R := Real(Pointer(Adr)^);
    if R > MaxVal then MaxVal := R
      else
    if R < MinVal then MinVal := R;
  end;  
end;


Вообще давай, я некоторые места закомментирую, напишу там же свой вариант и тебе вышлю по почте. А ты уже посмотришь, проверишь и что-нибудь да оставишь. Ок?


 
begin...end ©   (2006-01-06 17:10) [48]

> Fenik ©   (05.01.06 23:44) [35]

> Еще говорят, что доступ к символу строки путем PChar(str)
> [I-1] быстрее, чем просто str[I]

Наоборот.


 
Zeqfreed ©   (2006-01-06 21:48) [49]

Loginov Dmitry ©   (06.01.06 11:58) [41]
На самом деле, хэш заметно увеличит скорость лишь для случая с достаточно большими строками. Скорость получена в основном из-за использования бинарного поиска в сортированном массиве.


> Однако на 1000 элементов бывает до 20 одинаковых хэшей

Приведенная ф-ция хэширования является очень простенькой. Имеет смысл использовать более совершенный алгоритм.


> причем все значения хэшей распределыны гдето в
> интервале 0..50

Да, я не подумав толком, указал размер таблицы равный 51 :)
Для тысячи элементом нужно, конечно, указывать большие числа (только не забывать, что размер таблицы должен быть простым числом).


 
Loginov Dmitry ©   (2006-01-06 22:48) [50]


> Игорь Шевченко ©   (06.01.06 15:45) [46]
>
> Дети Ивана Кулибина


А почему не детский сад....


> Нет, так точно работать не будет (смотри как адрес считается)
> :))
> Законченный вариант, похоже будет таким:


Это нормально работает, я проверял. А вот почему работает... сам не соображу.


> Вообще давай, я некоторые места закомментирую, напишу там
> же свой вариант и тебе вышлю по почте. А ты уже посмотришь,
>  проверишь и что-нибудь да оставишь. Ок?


Ладно. Если код будет работать быстрее и надежнее, то конечно оставлю.


> Для тысячи элементом нужно, конечно, указывать большие числа

Да вроде я разные указывал, от 1 до 5000. Интервал все равно не меняется.


 
Loginov Dmitry ©   (2006-01-06 23:38) [51]


> Zeqfreed ©   (06.01.06 21:48) [49]


Только что придумал собственный алгоритм генерации хэша:


function TMatrixList.GenerateHash(const Str: string): Integer;
var
 Len, I: Integer;
 Flag: Boolean;
begin
 Result := 0;
 if Str[1] = "$" then Result := 0 else
 begin
   Len := Length(Str);
   Flag := False;
   for I := 1 to Len do
   begin
     if Flag then
       Result := Result + not Ord(Str[I])
     else
       Result := Result + Ord(Str[I]);
     Flag := not Flag;
   end;
 end;
end;


Как же его назвать?
:)))


 
Loginov Dmitry ©   (2006-01-07 22:27) [52]


> Fenik ©   (06.01.06 16:56) [47]


Прежде чем придумывать свои варианты, скачай последнюю версию от 7.01.2006. Дело в том, что некоторые функции я сам неплохо там оптимизировал. Особенно функция CalcFunc2() неплохо получилась (вроде бы). Я там добавил варианты, теперь можно передавать как имя массива, так и непосдерственно число, правда вот скорость упала, но не страшно. Варианты - тормознутейшая штука, но куда деваться, если хочется большей универсальности :)


> > Нет, так точно работать не будет (смотри как адрес считается)
> > :))
> > Законченный вариант, похоже будет таким:
>
>
> Это нормально работает, я проверял. А вот почему работает.
> .. сам не соображу.


Сообразил :) В этом алгоритме ошибок нет поэтому все и работает.

Вообщем, дальше по мылу...


 
Fenik ©   (2006-01-08 00:29) [53]

> Loginov Dmitry ©  (07.01.06 22:27) [52]

А, блин, уже отправил. не видел последней версии :))

>Я там добавил варианты

А нет никакой возможности отказаться от вариантов?

> Сообразил :) В этом алгоритме ошибок нет поэтому все и работает.

Точно. Это у меня глюки.


 
Loginov Dmitry ©   (2006-01-08 10:14) [54]


> А нет никакой возможности отказаться от вариантов?


В основном при использовании скорость падает если с помощью функции CalcFunc2() складываются два числа, а если массивы большие, то падение скорости ничтожно. Отказываться от вариантов - нет веских причин, я думаю.



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

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

Наверх




Память: 0.57 MB
Время: 0.045 c
1-1135748599
amb1
2005-12-28 08:43
2006.01.29
Как определить время создания DBF файла?


2-1137043616
Sirus
2006-01-12 08:26
2006.01.29
Цикл по компонентам


3-1133356299
Alena
2005-11-30 16:11
2006.01.29
Запрос к Active Directory


15-1136360214
Гарри Поттер
2006-01-04 10:36
2006.01.29
Что с Яндексом?


15-1136312918
PARUS
2006-01-03 21:28
2006.01.29
Взорвался блок питания!