Re[15]: Оптимизация через разделение/вынос функционала
От: Khimik  
Дата: 23.06.24 14:16
Оценка: :)
Здравствуйте, swame, Вы писали:

K>>tdoublearray.QSort2GPT — 1201 ms (это алгоритм от gpt который тут выкладывали, только с инициализацией вспомогательного массива arr в котором выполняется эта сортировка)


S>А сколько QSort2GPT без ненужного дополнительного массива?


Это tdoublearray.QSort5GPTNoExtraArr, 1233 мс.

Там с одной стороны экономится время на копирование, но с другой стороны идёт обращение к свойству fitems класса tdoublearray, а это указатель на указатель на массивоуказатель.

K>>tdoublearray.QSort5GPTNoExtraArr — 1233 ms (то же самое, только не используется вспомогательный массив, сразу запускается эта стандартная сортировка с Хоаром, обрабатывающая fitems класса tdoublearray)


K>>tdoublearray1.superqsort — 8471 ms (tdoublearray1 это то что вы выложили, обертка над tlist<double>, мой алгоритм в оп)


K>>tdoublearray1.QuickSortStandHoar — 2918 ms (стандартная сортировка с Хоаром, вызов QuickSort(0,count-1); )


S>непонятно что это, тот что я выкладывал или


Вот она:

  Скрытый текст
procedure tdoublearray1.QuickSortStandHoar;
begin
QuickSort(0,count-1);
end;

procedure tdoublearray1.QuickSort(low, high: Integer);
var
  i, j: Integer;
  pivot, temp: double;
begin
  i := low;
  j := high;
  pivot := Items[(low + high) div 2];

  repeat
    while Items[i] < pivot do
      Inc(i);
    while Items[j] > pivot do
      Dec(j);

    if i <= j then
    begin
      temp := Items[i];
      Items[i] := Items[j];
      Items[j] := temp;
      Inc(i);
      Dec(j);
    end;
  until i > j;

  if low < j then
    QuickSort(low, j);
  if i < high then
    QuickSort(i, high);
end;


Видимо это медленнее потому, что идёт обращение к items, а в моём варианте сначала создаётся массив и к нему обращаться можно быстрее (указатель на массив а не указатель на указатель на массив).

S>Сколько QSort2GPT на tdoublearray1? Алгоритм который я выкладывал?


Вроде QuickSortStandHoar или QuickSort(0,count-1) это она и есть.

S>Сколько стандартный sort на tdoublearray1? Вызов Sort


В смысле библиотечная функция? Я её не сравнивал, там же надо отдельно функцию-компаратор определить, мне это было лень.

S>И кстати тест на 32 или 64 разрядах? Я делал на 32


У меня 64.
"Ты должен сделать добро из зла, потому что его больше не из чего сделать". АБ Стругацкие.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.