本文实例讲述了PHP贪婪算法解决0-1背包问题的方法。分享给大家供大家参考。具体分析如下:
贪心算法解决0-1背包问题,全局最优解通过局部最优解来获得!比动态规划解决背包问题更灵活!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
//0-1背包贪心算法问题 class tanxin{ public $weight ; public $price ; public function __construct( $weight =0, $price =0) { $this ->weight= $weight ; $this ->price= $price ; } } //生成数据 $n =10; for ( $i =1; $i <= $n ; $i ++){ $weight =rand(1,20); $price =rand(1,10); $x [ $i ]= new tanxin( $weight , $price ); } //输出结果 function display( $x ) { $len = count ( $x ); foreach ( $x as $val ){ echo $val ->weight, ' ' , $val ->price; echo '<br>' ; } } //按照价格和重量比排序 function tsort(& $x ) { $len = count ( $x ); for ( $i =1; $i <= $len ; $i ++) { for ( $j =1; $j <= $len - $i ; $j ++) { $temp = $x [ $j ]; $res = $x [ $j +1]->price/ $x [ $j +1]->weight; $temres = $temp ->price/ $temp ->weight; if ( $res > $temres ){ $x [ $j ]= $x [ $j +1]; $x [ $j +1]= $temp ; } } } } //贪心算法 function tanxin( $x , $totalweight =50) { $len = count ( $x ); $allprice =0; for ( $i =1; $i <= $len ; $i ++){ if ( $x [ $i ]->weight> $totalweight ) break ; else { $allprice += $x [ $i ]->price; $totalweight = $totalweight - $x [ $i ]->weight; } } if ( $i < $len ) $allprice += $x [ $i ]->price*( $totalweight / $x [ $i ]->weight); return $allprice ; } tsort( $x ); //按非递增次序排序 display( $x ); //显示 echo '0-1背包最优解为:' ; echo tanxin( $x ); |
希望本文所述对大家的php程序设计有所帮助。