Arsip: Himpunan dan himpunan bagian

 
user image
more 13 years ago

telkom_1

Rekan2 mo nanya neh... Bagaimana caranya mencari himpunan bagian dari suatu himpunan, selain himpunan kosong. Misalnya : Input: A = {a,b,c}[/b:95646dbfd3] [b:95646dbfd3]Output: {a}, {b}, {c}, {a,b}, {a,c}, {b,c}, {a,b,c} Jadi jumlah output seluruhnya ada --> (2 pangkat n) - 1 = 2³-1 = 8-1=7 (Himpunan kosong tidak termasuk). Inputan terserah user. Mohon bantuannya. Terima kasih. :)
user image
more 13 years ago

telkom_1

Rekan2 mo nanya neh... Bagaimana caranya mencari himpunan bagian dari suatu himpunan, selain himpunan kosong. Misalnya : Input: A = {a,b,c}[/b:dd1d5d7401] Output: [b:dd1d5d7401]{a}, {b}, {c}, {a,b}, {a,c}, {b,c}, {a,b,c} Jadi jumlah output seluruhnya ada --> (2 pangkat n) - 1 = 2³-1 = 8-1=7 (Himpunan kosong tidak termasuk). Inputan terserah user. Mohon bantuannya. Terima kasih. Smile
user image
more 13 years ago

_lmz

2^3 - 1 itu bukan kebetulan. Ini bisa dianggap anda memiliki bilangan 3 bit dan mau menghitung semua kombinasi 3 bit tersebut kecuali 0. Untuk mengeluarkan semua outputnya anda tinggal menjalankan counter dari 1 sampai 2^n - 1 dan mengubah bit di bilangan tersebut menjadi anggota himpunan anda (misal a, b, dan c di kasus tersebut). Contoh u/ kasus anda: 1 -> biner 0 0 1 -> {c} 2 -> biner 0 1 0 -> {b} 3 -> biner 0 1 1 -> {b, c} 4 -> biner 1 0 0 -> {a} 5 -> biner 1 0 1 -> {a, c} 6 -> biner 1 1 0 -> {a, b} 7 -> biner 1 1 1 -> {a, b, c} Untuk mengetes bit dapat dilakukan dengan operator "and" seperti:

var i : integer;
for i := 1 to 7 do begin
  if (i and 1) <> 0 then write('c');
  if (i and 2) <> 0 then write('b');
  if (i and 4) <> 0 then write('a');
  writeln;
end;
user image
more 13 years ago

telkom_1

Terimakasi buat _lmz yang telah me-reply, saya coba dulu.
user image
more 13 years ago

telkom_1

In Delphindo@yahoogroups.com Agung Dewandaru wrote:

program ProjectEnum;
{ mengenumerasi subset dari sebuah set. pendekatan rekursif. }
{$APPTYPE CONSOLE}
uses
SysUtils;
type TElement = record
IsMember: boolean;
Symbol: Char;
end;
type TMySet = array of TElement;
procedure PrintOutSet(S: TMySet);
var I: Integer;
begin
Writeln;
for I := 0 to Length(S) - 1 do
begin
if S[I].IsMember then
Write(S[I].Symbol);
end;
end;
procedure Loop(S: TMySet; Idx: Integer);
var I: Integer;
begin
if Idx = Length(S) then begin
PrintOutSet(S);
exit;
end;
for I := 0 to 1 do
begin
S[Idx].IsMember := I = 1;
Loop(S, Idx + 1);
end;
end;
procedure GenSet(S: TMySet);
begin
Loop(S,0);
end;
var S: TMySet;
begin
{ TODO -oUser -cConsole Main : Insert code here }
SetLength(S,4);
S[0].Symbol := 'a';
S[1].Symbol := 'b';
S[2].Symbol := 'c';
S[3].Symbol := 'd';
GenSet(S);
ReadLn;
end.
Rekan2, saya sudah coba mencari himpunan bagian dengan algoritma ini, bisa diterapkan untuk jumlah anggota himpunan < 20 kalo n nya udah lebih besar dari 20 udah susah, lama bgt nunggunya. karena jumlah yang digenerate : 2^n klo anggota himpunanya 20 : 1048576 subset. klo anggota himpunanya 21 : 2097152 subset. klo anggota himpunanya 22 : 4194304 subset. . . dst. Jadi, jumlah subset yang digenerate = 2 kali lipat dari jumlah sebelumnya. Rekan2, Kira2 ada yang lebih efisien lagi ngak? Terima kasih sebelumnya. :)
more ...
  • Pages:
  • 1
Share to
Local Business Directory, Search Engine Submission & SEO Tools FreeWebSubmission.com SonicRun.com