임의 순열(Random Permutation) 만들기
절름발이 프로그래머/Delphi / 2011. 5. 9. 16:41
특정 일련 숫자들로부터 임의 순열(즉, 무작위로 뒤섞인 일련의 숫자들)을 만드는 방법입니다.
다음의 예제는 1부터 100까지의 숫자가 일련되어 저장된 배열에서, 순서가 무작위로 뒤바뀐 배열을 만들어냅니다.
SizeofArr 을 바꿔서, 다양한 일련의 숫자를 뒤섞을 수 있습니다.
procedure TForm1.btn2Click(Sender: TObject);
var
RandomPermutationArray : array of Integer;
I, J, SizeofArr, RandomPosition, Temp : Integer;
PrintStr : String;
begin
SizeofArr := 100;
SetLength(RandomPermutationArray, SizeofArr + 1); // We need one more space, because number starts 1.
// array init
for I := 1 to SizeofArr do
RandomPermutationArray[I] := I;
// randoomize Permutation
for J := 1 to SizeofArr - 1 do
begin
RandomPosition := J + Random(SizeofArr - J) + 1;
Temp := RandomPermutationArray[J];
RandomPermutationArray[J] := RandomPermutationArray[RandomPosition];
RandomPermutationArray[RandomPosition] := Temp
end;
PrintStr := '';
for I := 1 to SizeofArr do
begin
PrintStr := PrintStr + ' ' + IntToStr(RandomPermutationArray[I]);
end;
edt3.Text := PrintStr;
end;
다음의 예제는 1부터 100까지의 숫자가 일련되어 저장된 배열에서, 순서가 무작위로 뒤바뀐 배열을 만들어냅니다.
SizeofArr 을 바꿔서, 다양한 일련의 숫자를 뒤섞을 수 있습니다.
procedure TForm1.btn2Click(Sender: TObject);
var
RandomPermutationArray : array of Integer;
I, J, SizeofArr, RandomPosition, Temp : Integer;
PrintStr : String;
begin
SizeofArr := 100;
SetLength(RandomPermutationArray, SizeofArr + 1); // We need one more space, because number starts 1.
// array init
for I := 1 to SizeofArr do
RandomPermutationArray[I] := I;
// randoomize Permutation
for J := 1 to SizeofArr - 1 do
begin
RandomPosition := J + Random(SizeofArr - J) + 1;
Temp := RandomPermutationArray[J];
RandomPermutationArray[J] := RandomPermutationArray[RandomPosition];
RandomPermutationArray[RandomPosition] := Temp
end;
PrintStr := '';
for I := 1 to SizeofArr do
begin
PrintStr := PrintStr + ' ' + IntToStr(RandomPermutationArray[I]);
end;
edt3.Text := PrintStr;
end;