Информация об изменениях

Сообщение Re[2]: Оптимизация через разделение/вынос функционала от 21.06.2024 4:17

Изменено 21.06.2024 4:19 swame

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

K>Азарту ради, я написал код с сортировкой с использованием дополнительной памяти (деление интервала значений на секции):


K>
  Скрытый текст
K>
procedure TDoubleArray.QSort10Sections;
K>const
K>SectionsCount=100;
K>var
K>sectionsize:integer;
K>Sections:array[0..SectionsCount-1] of tdoublearray;
K>q,w:integer;
K>minval,maxval:double;
K>interval:double;
K>begin
K>if fcount<300 then begin
K>QSort2GPT;
K>exit;
K>end;


K>minval:=MaxSafeFloat;
K>maxval:=-MaxSafeFloat;
K>for q:=0 to fcount-1 do begin
K>if fitems[q]<minval then minval:=fitems[q];
K>if fitems[q]>maxval then maxval:=fitems[q];
K>end;//next q

K>minval:=minval-minsafefloat;
K>maxval:=maxval+minsafefloat;
K>interval:=maxval-minval;

K>sectionsize:=fcount div sectionscount;
K>for q:=0 to sectionscount-1 do begin
K>sections[q]:=TDoubleArray.Create;
K>sections[q].Capacity:=sectionsize*10;
K>end;

K>for q:=0 to fcount-1 do begin
K>sections[floor((sectionscount-1)*(fitems[q]-minval)/interval)].Add(fitems[q]);
K>end;

K>count:=0;
K>for q:=0 to SectionsCount-1 do begin
K>sections[q].QSort10Sections;
K>for w:=0 to sections[q].fcount-1 do add(sections[q].fitems[w]);
K>sections[q].Free;
K>end;


K>end;
K>



K>Прежде чем кликать по спойлеру, ответьте на вопрос — вы бы легко написали этот алгоритм?


Абы какую сортировку написал бы легко. Чтобы он реально обогнал алгоритмы рекордсмены — вряд ли.
K>Мой алгоритм вышел примерно на 30% быстрее стандартной быстрой сортировки со схемой Хоара. Памяти он расходует не особо много. А вы бы опять искали готовый алгоритм вместо голимого придумывания велосипеда?

Тут содержится некий QSort2GPT. Это что ?
30% по сравнению с QSort2GPT или TList <double>.Sort?
Re[2]: Оптимизация через разделение/вынос функционала
Здравствуйте, Khimik, Вы писали:

K>Азарту ради, я написал код с сортировкой с использованием дополнительной памяти (деление интервала значений на секции):


K>end;

K>[/pascal]
K>[/cut]

K>Прежде чем кликать по спойлеру, ответьте на вопрос — вы бы легко написали этот алгоритм?


Абы какую сортировку написал бы легко. Чтобы он реально обогнал алгоритмы рекордсмены — вряд ли.

K>Мой алгоритм вышел примерно на 30% быстрее стандартной быстрой сортировки со схемой Хоара. Памяти он расходует не особо много. А вы бы опять искали готовый алгоритм вместо голимого придумывания велосипеда?


Учитывая предыдущий опыт думаю что ты опять морочишь голову. Либо не работает, либо некорректный тест.
Тут содержится некий QSort2GPT. Это что ?
30% по сравнению с QSort2GPT или TList <double>.Sort?