Sinh hoán vị ngẫu nhiên



Sinh hoán vị ngẫu nhiên
               Sinh ngẫu nhiên cho mảng nguyên a một hoán vị của 1..n.
Gia sư tin học, Đặc tả
Xuất phát từ hoán vị đơn vị a = (1, 2,..., n) ta đổi chỗ a[1] với một phần tử tuỳ ý (được chọn ngẫu nhiên) a[j] sẽ được một hoán vị.  Ta có thể thực hiện việc đổi chỗ nhiều lần.
(* Pascal  *)
(*-----------------------------------------
    Sinh ngau nhien cho mang nguyen a
    mot hoan vi cua 1..n
------------------------------------------*)
program GenPer;
const MN = 1000; { so luong toi da }
            Esc = #27; { dau thoat }
            BL = #32; { dau cach }
var a: array[1..MN] of integer;
(*-----------------------
      Sinh du lieu
-----------------------*)
procedure Gen(n: integer);
var i,j,x:  integer;
begin
       { Khoi tao hoan vi don vi }
       for i:= 1 to n do a[i]:= i;
       for i:= 1 to n do
 begin
   j := random(n)+1;
   x := a[1]; a[1] := a[j]; a[j] := x;
 end;
end;
procedure Xem(n: integer); tự viết
procedure Test;
var n: integer;
begin
randomize;
        repeat {chon ngau nhien kich thuoc n = 10..39}
   n := random(30)+10; Gen(n); Xem(n);
        until ReadKey = Esc; { Nhan ESC de thoat }
end;
BEGIN
  Test;
END.

Không có nhận xét nào:

Đăng nhận xét