算法
be.be
少年,充满激情,勇敢的大步向前,享受生活的得失,直面璀璨的岁月
展开
-
PHP-算法-最少比较次数获取最大值最小值
<?php//获取最大、最小function getMinMax($arr){ $n = count($arr); if ($n ==1 ) return [$arr[0],$arr[0]]; //最小、最大 //初始化最大、最小 if ($n > 1) { if ($arr[0]>$arr[1]) { $max = $arr[0]; $min = $arr[1];.原创 2020-05-10 09:07:14 · 1041 阅读 · 0 评论 -
php-数据结构-二叉树的构建、前序遍历,中序遍历,后序遍历,查找,打印
<?php/*** 结点*/class Node{ public $data; //结点数据 public $left; //左孩子 public $right; //右孩子 public function __construct($data, $left=null, $right=null) { $this->data = $data; $this->left = $left; $this->r...原创 2020-05-09 19:22:54 · 163 阅读 · 0 评论 -
php-算法-树-B+树的实现
php-树-B+树的实现原创 2020-05-09 14:57:51 · 340 阅读 · 0 评论 -
PHP-树-红黑树的实现
PHP-树-红黑树的实现原创 2020-05-09 14:56:47 · 367 阅读 · 0 评论 -
PHP-树-平衡二叉树(AVL树的实现)
PHP-树-平衡二叉树(AVL树的实现)原创 2020-05-09 14:56:14 · 108 阅读 · 0 评论 -
php-树-最优二叉树(赫夫曼树)
php-树-最优二叉树(赫夫曼树)原创 2020-05-09 14:55:38 · 95 阅读 · 0 评论 -
PHP-树-二叉排序树的实现
PHP-树-二叉排序树的实现原创 2020-05-09 14:54:39 · 122 阅读 · 0 评论 -
php -树-二叉树的实现
php -树-二叉树的实现原创 2020-05-09 14:53:47 · 253 阅读 · 0 评论 -
php -最大堆、最小堆构建,堆排序
php -最大堆、最小堆构建,堆排序原创 2020-05-09 14:52:37 · 412 阅读 · 0 评论 -
php-算法-基数排序
/** * 基数排序 * @param array $arr * @param int $m 数字的最大位数 * @param int $d 几进制的数,也是桶的个数 */function radix($arr,$m,$d){ $n = count($arr); if($n<2) return $arr; //用数组表示队列,$d进制就有$d个队列,也就是多少个桶,初始化 for ($i=0;$i<$d;$i++) { $queu.原创 2020-05-09 14:29:55 · 194 阅读 · 0 评论 -
Lru算法
LRU算法 缓存淘汰策略四种实现方式LRU1.1.原理LRU(Leastrecentlyused,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”。1.2.实现最常见的实现是使用一个链表保存缓存数据,详细算法实现如下:1.新数据插入到链表头部;2.每当缓存命中(...转载 2020-05-05 23:37:11 · 218 阅读 · 0 评论 -
二叉树左旋右旋
二叉树的左旋和右旋简单图示旋转是二叉树的基本操作,我们可以对任意一个存在父亲节点的子节点进行旋转,包括如下几种形式(设被旋转节点为x,其父亲节点为p):1.左旋旋转前,x是p的右儿子。x的左儿子(若存在)变为p的右儿子,p变为x的左儿子。如下图2.右旋旋转前,x是p的左儿子。x的右儿子(若存在)变为p的左儿子,p变为x的右儿子。如下图综上总结:是左旋还是右旋的判断...转载 2020-05-04 23:53:23 · 575 阅读 · 0 评论 -
乐观锁,CAS算法
一、CAS的定义一个线程失败或挂起并不会导致其他线程也失败或挂起,那么这种算法就被称为非阻塞算法。而CAS就是一种非阻塞算法实现,也是一种乐观锁技术,它能在不使用锁的情况下实现多线程安全,所以CAS也是一种无锁算法。CAS 比较并交换,是一种实现并发算法时常用到的技术,Java并发包中的很多类都使用了CAS技术。CAS具体包括三个参数:当前内存值V、旧的预期值A、即将更新的值B,当且仅当...转载 2020-04-29 17:11:35 · 229 阅读 · 0 评论 -
PHP 实现N阶矩阵相乘
<?php/** * php实现n阶矩阵相乘 * * 5 2 4 2 4 24 34 * 3 8 2 x 1 3 = 20 40 * 6 0 4 3 2 24 32 * 0 1 6 19 15 * */class matrix{ private $a; private $b; ...原创 2020-04-25 23:30:12 · 945 阅读 · 0 评论 -
求和为正数n的连续正数
//求和为n的连续正数,例如:15 = 7+8 = 4+5+6 = 1+2+3+4+5function getArrN($n){ $res = []; if($n<2) return $res; //i 个数相加 for($i=2;$i<$n;$i++){ //从第一个开始取数 for($j=1;$j...原创 2020-04-16 21:57:55 · 167 阅读 · 0 评论 -
负载均衡算法
负载均衡算法 — 平滑加权轮询在 负载均衡算法 — 轮询 一文中,我们就指出了加权轮询算法一个明显的缺陷。即在某些特殊的权重下,加权轮询调度会生成不均匀的实例序列,这种不平滑的负载可能会使某些实例出现瞬时高负载的现象,导致系统存在宕机的风险。为了解决这个调度缺陷,就提出了 平滑加权轮询 调度算法。待解决的问题为了说明平滑加权轮询调度的平滑性,使用以下 3 个特殊的权重实例来...原创 2020-04-12 19:22:48 · 247 阅读 · 0 评论 -
php-通过数组结构实现LRU算法
class Lru{ private $lru_arr = []; //lru存放数组 private $len; //最大限制长度 public function __construct($len){ $this->len = $len; } //生成hash key,对应array_shift后 数字索引会自动从0开始 pu...原创 2020-03-30 12:58:50 · 241 阅读 · 0 评论 -
PHP -算法-二路归并
/** * 二路归并排序 */function merge(array $arr){ $k = 1; $n = count($arr); while ($k<$n){ $arr = mergeOne($arr, $k); $k*=2; } return $arr;}/** * 1次归并执行过程处理 * @param ...原创 2020-03-29 23:41:18 · 147 阅读 · 0 评论 -
php-有序数组合并后仍有序
function sortMerge($arr1,$arr2){ $l1 = count($arr1); $l2 = count($arr2); $res = []; $i=0; $j=0; while($i<$l1 && $j<$l2){ if($arr1[$i]<$arr2[$j]) ...原创 2020-03-29 22:18:52 · 228 阅读 · 0 评论 -
PHP-希尔排序
function shell(array $arr,array $gaps=[]){ if(!$arr) return $arr; //测试用,默认指定间隔数组,正常传入即可 $gaps = [10,5,2,1]; $l_g = count($gaps); $l = count($arr); for($i=0;$i<$l_g;$i+...原创 2020-03-29 22:17:27 · 171 阅读 · 0 评论 -
php-插入排序
直接插入排序原创 2020-03-29 22:14:04 · 71 阅读 · 0 评论 -
php-兔子问题,斐波那契数列
/** * 兔子问题(斐波那契数列) * 问题说明:3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子, * 假如兔子都不死,问第n个月的兔子总数为多少对 * @param int $n * @return int $total */function rabbit($n){ if($n<3) return 1; ...原创 2020-03-29 22:11:08 · 566 阅读 · 0 评论 -
php-约瑟夫问题
/** * 约瑟夫问题:例子,30个报数,1-9,到9的人剔除,依次循环 * @param $n 总人数 * @param $spare 最后剩余的人数 * @param $spe 报数1-$spe * @return $del 去掉 */function yuesefu($n,$spare,$spe=9){ $t_n = $n+1; $del=[]; ...原创 2020-03-29 22:06:46 · 98 阅读 · 0 评论 -
php-选择排序
function select(array $arr){ if(!$arr) return $arr; $l = count($arr); for($i=1;$i<$l;$i++){ $small = $i-1; for($j=$i;$j<$l;$j++){ if($arr[$j]<...原创 2020-03-29 21:58:51 · 105 阅读 · 0 评论 -
PHP-算法-冒泡排序
function bubble(array $arr){ if(!$arr) return $arr; $l = count($arr); $flag = 1; for($i=1;$i<$l && $flag;$i++){ for($j=0;$j<$l-$i;$j++){ $fla...原创 2020-03-29 21:57:36 · 71 阅读 · 0 评论 -
PHP-快速排序的2种实现方法
function quick2(&$arr, $low, $height){ $i = $low; $j = $height; $tmp = $arr[$low]; while ($i < $j) { while ($arr[$j] > $tmp && $j > $i) $j --; if...原创 2020-03-29 21:52:12 · 124 阅读 · 0 评论 -
经典趣味算法问题
1.约瑟夫问题:传说在公园1世纪的犹太战争中,犹太约瑟夫是公元一世纪著名的历史学家。在罗马人占领乔塔帕特后,39 个犹太人与约瑟夫及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人俘虏,于是决定了一个流传千古的自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报到第3人该人就必须自杀,然后再由下一个人重新报数,直到所有人都自杀身亡为止。然而约瑟夫和他的朋友并不想遵从这个...原创 2019-12-15 20:33:01 · 457 阅读 · 1 评论