Форум: "Основная";
Текущий архив: 2017.07.23;
Скачать: [xml.tar.bz2];
ВнизВывод всех перестановок k элементов из множества N имеющихся Найти похожие ветки
← →
Очень злой (2012-11-06 00:55) [40]Вроде так... Правда порядок определяется порядком следования символов в Edit1
например:
Edit1.text="abcd6r" K=4abcd
abc6
abcr
abd6
abdr
ab6r
acd6
acdr
ac6r
ad6r
bcd6
bcdr
bc6r
bd6r
cd6r
← →
Очень злой (2012-11-06 01:21) [41]Попробовал запустить код Sha, и понял что я неправильно понял условие...
Сейчас еще подумаю
← →
Очень злой (2012-11-06 01:48) [42]
> один из способов перечисления размещений состоит в использовании
> перестановок и сочетаний, а именно во всевозможных перестановках
> элементов каждого сочетания
Если так то:var
n,s:string;
...
//ищем перестановки
procedure recurse2(s:string;pos:integer);
var
c:char;
i:integer;
begin
if pos>=length(s) then Form1.Memo1.Lines.Add(s)
else for i:=pos to length(s) do
begin
c:=s[pos];
s[pos]:=s[i];
s[i]:=c;
recurse2(s,pos+1);
end;
end;
// Ищем сочетания
procedure recurs(pos,start,last,endd:integer);
var
i:integer;
begin
if last>endd then recurse2(s,1)
else for i:=start to last do
begin
s[pos]:=n[i];
recurs(pos+1,i+1,last+1,endd);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
n:=Edit1.text;
setlength(s,SpinEdit1.Value);
// Memo1.Lines.Clear;
// Memo1.Lines.BeginUpdate;
recurs(1,1,length(Edit1.Text)-SpinEdit1.Value+1,Length(Edit1.text));
// Memo1.Lines.EndUpdate;
end;
Насчет скорости не замерял... да и намутил я тут, много чего неоптимально , можно улучшить,
например length(s) вычислять не нужно , так как оно всегда равно spinedit1.value, ну и еще есть чего оптимизировать
← →
Очень злой (2012-11-06 09:09) [43]М-да, а если принимать во внимание время, то все равно алгоритм Sha намного (причем очень) быстрее получается...
← →
Sha © (2012-11-09 21:52) [44]вот тут еще немного быстрее:
http://guildalfa.ru/alsha/node/26
Страницы: 1 2 вся ветка
Форум: "Основная";
Текущий архив: 2017.07.23;
Скачать: [xml.tar.bz2];
Память: 0.53 MB
Время: 0.002 c