Advertisement
cdsatrian

php combination

Sep 6th, 2012
151
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 2.20 KB | None | 0 0
  1. <?php
  2. /*** ---------- COMBINATIONAL -------- ***/
  3. /*---- created by cahyadsn@yahoo.com ----*/
  4. /*-------created on 2012-09-06 -----------*/
  5.  
  6.  
  7. function combination($member,$num){
  8.   $n = count($member);  
  9.   //jumlah total kombinasi yang mungkin
  10.   $total = pow(2, $n);
  11.   $list =array();
  12.   //Loop untuk setiap kombinasi yang mungkin
  13.   $k=0;
  14.   for ($i = 0; $i < $total; $i++) {  
  15.     $list[$k]=array();
  16.     //Untuk setiap kombinasi, dicek untuk setiap biat
  17.     for ($j = 0; $j < $total; $j++) {  
  18.        //apakah data bit $j ada pada bit $i?  
  19.         if ((pow(2, $j) & $i)) $list[$k][]=$member[$j];      
  20.     }
  21.     if(count($list[$k])==$num){
  22.       //jika jumlah anggota sama dengan jumlah yang diinginkan increment $k
  23.       $k++;
  24.     }else{
  25.       //jika tidak sesuai, hapus array $list[$k]
  26.       unset($list[$k]);
  27.     }
  28.   }
  29.   return $list;
  30. }
  31.  
  32.  
  33. function print_member($list,$name=''){
  34.   echo ($name)?"$name = ":"";
  35.   echo "{";
  36.   for($i=0;$i<count($list);$i++){
  37.     if(isset($list[$i][0])){
  38.       echo "{";
  39.       for($j=0;$j<count($list[$i]);$j++){
  40.         echo ($j!=0?",":"").$list[$i][$j];
  41.       }
  42.       echo "}";
  43.     }else{
  44.       echo ($i!=0?",":"").$list[$i];
  45.     }
  46.   }
  47.   echo "}";
  48.   echo "<br />";
  49. }
  50.  
  51. function array_composition($list){
  52.   $r=$list[0];
  53.   for($i=1;$i<count($list);$i++){
  54.     $r=array_merge($r,$list[$i]);
  55.   }
  56.   $r=array_values(array_unique($r));
  57.   return $r;
  58. }
  59.  
  60. //example:
  61. $data_awal=array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22);
  62. print_member($data_awal,'source');
  63. //--- masukkan min_support #1, pilih dari list data awal sebelumnya, sehingga didapat:
  64. $select_1 = array(6,7,8,9,10,11);    
  65. $num = 2; //jumlah anggota untuk setiap kombinasi yang diinginkan
  66. print_member($select_1,'select_1');
  67. $result=combination($select_1,$num);
  68. print_member($result,'combination-2');
  69. //--- masukkan min_support #2, pilih dari list kombinasi sebelumnya, sehingga didapat:
  70. $select2=array($result[0],$result[1],$result[2]);
  71. print_member($select2,'select_2');
  72. // increment jumlah anggota untuk tiap kombinasi
  73. $num++; // --- $num=3;
  74. $select2=array_composition($select2);
  75. $result2=combination($select2,$num);
  76. print_member($result2,'combination-3');
  77. //--- dst
  78. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement