Heim > Backend-Entwicklung > PHP-Tutorial > PHP回溯法解决0-1背包问题实例分析_PHP教程

PHP回溯法解决0-1背包问题实例分析_PHP教程

WBOY
Freigeben: 2016-07-13 10:00:27
Original
886 Leute haben es durchsucht

PHP回溯法解决0-1背包问题实例分析

 这篇文章主要介绍了PHP回溯法解决0-1背包问题,实例分析了php回溯法解决背包问题的技巧,具有一定参考借鉴价值,需要的朋友可以参考下

 

 

本文实例讲述了PHP回溯法解决0-1背包问题的方法。分享给大家供大家参考。具体分析如下:

这段代码是根据《软件设计师》教程的伪代码写的;
最麻烦的不是伪代码改成php,而是数组下标从0开始,及相应的下标判断问题;
带着调试输出一块写上

?

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

64

65

66

67

68

69

70

71

72

73

74

$v_arr = array(11,21,31,33,43,53,55,65);

$w_arr = array(1,11,21,23,33,43,45,55);

$n = count($w_arr );

//测试输出

var_dump(bknap1(110));

//var_dump(bound(139,89,7,110));

function bound($v,$w,$k,$W_total){

global $v_arr,$w_arr,$n;

$b = $v;

$c = $w;

//var_dump($W_total);var_dump($n);var_dump($k);var_dump($v);var_dump($w);

//die;

for($i=$k+1;$i

$c = $c + $w_arr[$i];

//var_dump($W_total);var_dump($c);

if($c

$b += $v_arr[$i];

else{

//var_dump((1-($c-$W_total)/$w_arr[$i])*$v_arr[$i]);

$b = $b+(1-($c-$W_total)/$w_arr[$i])*$v_arr[$i];

return $b;

}

}

/*var_dump('------bound head');

var_dump($k);

var_dump($b);

var_dump('------bound end');*/

return $b;

}

function bknap1($W_total){

global $v_arr,$w_arr,$n;

$cw = $cp = 0;

$k = 0;

$fp = -1;

while(true){

while($k

$cw += $w_arr[$k];

$cp += $v_arr[$k];

$Y_arr[$k] = 1;

$k +=1;

}

//var_dump($cw);var_dump($cp);var_dump($Y_arr);var_dump($k);var_dump($n);

if($k==$n){

$fp = $cp;

$fw = $cw;

$k = $n-1;

$X_arr = $Y_arr;

//bound($cp,$cw,$k,$W_total);

//var_dump(bound($cp,$cw,$k,$W_total),$fp,$k);die;

//var_dump($fp);var_dump($fw);var_dump($Y_arr);var_dump($k);var_dump($n);

}else{

$Y_arr[$k] = 0;

}

//var_dump($Y_arr);var_dump($k);var_dump($n);//die;

//var_dump(bound($cp,$cw,$k,$W_total),$fp);die;

while(bound($cp,$cw,$k,$W_total)

{

while($k>=0 && $Y_arr[$k]!=1){

$k -= 1;

}

if($k

{

return $X_arr;

}

var_dump($k);

$Y_arr[$k] = 0;

$cw -= $w_arr[$k];

$cp -= $v_arr[$k];

}

$k += 1;

}

}

?>

希望本文所述对大家的php程序设计有所帮助。

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/973133.htmlTechArticlePHP回溯法解决0-1背包问题实例分析 这篇文章主要介绍了PHP回溯法解决0-1背包问题,实例分析了php回溯法解决背包问题的技巧,具有一定参考借...
Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage