Lompat ke isi

Membangkitkan Permutasi

Dari Wikipedia bahasa Indonesia, ensiklopedia bebas

Membangkitkan Permutasi berarti membentuk untai S' yang merupakan permutasi dari untai S.

Permasalahan umum yang terdapat seputar membangkitkan permutasi adalah:

Diberikan sebuah untai S, tentukan:

  • Semua permutasi dari S
  • Semua permutasi n-elemen dari S
  • Permutasi berikutnya setelah S
  • Permutasi ke-k dari s sesuai urutan leksikografik (atau aturan lainnya)

Membangkitkan seluruh permutasi dari S[sunting | sunting sumber]

Menggunakan rekursi[sunting | sunting sumber]

Kita dapat mendaftar semua himpunan permutasi dari S dengan algoritme sebagai berikut:

Diberikan sebuah untai

.

Hendak dibuat himpunan

.
  1. Jika s tidak kosong, maka untuk setiap abjad untai s (a0 hingga an), yaitu ai:
    1. Pindahkan ai ke p (taruh paling belakang).
    2. Jalankan algoritme kembali untuk s dan p yang baru.
    3. Kembalikan huruf yang telah dipindahkan ke posisi semula.
  2. Jika s sudah kosong, maka p adalah sebuah permutasi dari s.

Implementasi algoritme tersebut dalam bahasa Pascal adalah seperti yang tertulis di bawah ini. Prosedur ini akan mencetak semua kemungkinan permutasi.

 procedure perm(s, p: string);
 begin
   if' s <> ''  then
   begin
     for i:= 1 to length(s) do
     begin
       // pindahkan abjad ke-i dari s ke p
       p:= p + s[i];
       delete(s, i, 1);
 
       perm(s, p);
 
       // kembalikan abjad yang telah diambil ke posisi semula
       insert(p[length(p)], s, 1);
       delete(p, length(p), 1);
     end;
   end
   else
     writeln(p);
 end;

Lihat pula[sunting | sunting sumber]

Templat:Algoritme-stub