algorithm.php 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: stanley-king
  5. * Date: 16/6/24
  6. * Time: 上午1:18
  7. */
  8. function less($x,$y)
  9. {
  10. return $x < $y;
  11. }
  12. class algorithm
  13. {
  14. static function bsearch($x, $list)
  15. {
  16. $left = 0;
  17. $right = count($list)-1;
  18. while ($left <= $right) {
  19. $mid = ($left + $right) >> 1;
  20. if ($list[$mid] == $x) {
  21. return $mid;
  22. } elseif ($list[$mid] > $x) {
  23. $right = $mid - 1;
  24. } elseif ($list[$mid] < $x) {
  25. $left = $mid + 1;
  26. }
  27. }
  28. return -1;
  29. }
  30. static function binary_search($sortarr, $val, $compare = "less")
  31. {
  32. $last = count($sortarr);
  33. $first = self::lower_bonud($sortarr,$val,$compare);
  34. return $first != $last && !$compare($val, $sortarr[$first]);
  35. }
  36. //返回位置标记了一个 >= value 的值。
  37. static function lower_bonud($container, $val,$compare = "less")
  38. {
  39. if(!is_array($container)) {
  40. return -1;
  41. }
  42. $len = count($container);
  43. $first = 0;
  44. while ($len != 0)
  45. {
  46. $l2 = intval($len / 2);
  47. $m = $first + $l2;
  48. if ($compare($container[$m],$val))
  49. {
  50. $first = ++$m;
  51. $len -= $l2 + 1;
  52. }
  53. else {
  54. $len = $l2;
  55. }
  56. }
  57. return $first;
  58. }
  59. //返回位置标记了一个 > value 的值。
  60. static function upper_bound($container, $val,$compare = "less")
  61. {
  62. if (!is_array($container)) {
  63. return -1;
  64. }
  65. $len = count($container);
  66. $first = 0;
  67. while ($len != 0)
  68. {
  69. $l2 = intval($len / 2);
  70. $m = $first + $l2;
  71. if ($compare($val,$container[$m])) {
  72. $len = $l2;
  73. } else {
  74. $first = ++$m;
  75. $len -= $l2 + 1;
  76. }
  77. }
  78. return $first;
  79. }
  80. static function array_insert(&$arr,$pos,$val)
  81. {
  82. array_splice($arr,$pos,0,$val);
  83. }
  84. static function array_erase(&$arr,$pos)
  85. {
  86. return array_splice($arr,$pos,1);
  87. }
  88. }