Текущий архив: 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