PavlovskyЦитата:
Может я где то пропустил. Опишите, плиз, свой алгоритм перебора.
Сортирую линии, затем последовательно заполняю числами с проверкой на простоту. Набор простых чисел меня не интересовал (я его не использовал). Это позволяет быстро выходить на
простых линий. При
я использовал случайное перемешивание
и повторял поиск.
Предварительно я собирался сей простой алгоритм использовать только для знакомства с ситуацией, но так и "застрял". При фиксированной схеме и заданном распределении
уже при
идет полный перебор за несколько секунд-минут. При
любая случайная схема сразу дает решение, только при
иногда можно наблюдать небольшое замедление процесса. При этом я еще не дошел до чисто технической оптимизации алгоритма.
Даже сортировку линий оставил упрощенную, хотя один раз попробовал иную - время работы резко увеличилось (при
). Вот, используемый вес линий:
Код:
function ves(l:integer):longint;
const p:array[1..4] of integer=(27000,900,30,1);
var k:integer;v:longint;
begin
v:=0;
case line[l,1] of
0:for k:=0 to n-1 do v:=v+p[met[line[l,0],k]];
1:for k:=0 to n-1 do v:=v+p[met[k,line[l,0]]];
2:for k:=0 to n-1 do v:=v+p[met[(line[l,0]+k)mod n,k]];
3:for k:=0 to n-1 do v:=v+p[met[(n+line[l,0]-k)mod n,k]];
end;
ves:=v;
end;
Возможно, динамическая сортировка была бы лучше - не знаю.
Пока нахожусь в полной растерянности, нужно все переписывать заново.