![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
PHP数据结构与算法
文章平均质量分 73
LSGOZJ
每天一个台阶!!!
展开
-
关于PHP实现迭代器和迭代
PHP的面向对象引擎提供了一个非常聪明的特性,就是,可以使用foreach()方法通过循环方式取出一个对象的所有属性,就像数组方式一样,代码如下:class Myclass{ public $a = 'php'; public $b = 'onethink'; public $c = 'thinkphp';}$myclass = new Myclass();//用foreach()转载 2015-10-18 10:58:41 · 2417 阅读 · 0 评论 -
PHP实现二叉树的深度优先遍历(前序、中序、后序)和广度优先遍历(层次)
前言:深度优先遍历:对每一个可能的分支路径深入到不能再深入为止,而且每个结点只能访问一次。要特别注意的是,二叉树的深度优先遍历比较特殊,可以细分为先序遍历、中序遍历、后序遍历。具体说明如下:前序遍历:根节点->左子树->右子树中序遍历:左子树->根节点->右子树后序遍历:左子树->右子树->根节点广度优先遍历:又叫层次遍历,从上往下对每一层依次访问,在每一层中,从左往右(也可以从右往左)访问原创 2016-10-28 09:16:12 · 9923 阅读 · 1 评论 -
PHP有序表查找----插值查找
前言:在前面我们介绍了二分查找,但是我们考虑一下,为什么一定要折半呢?而不是折四分之一或者更多?打个比方,在英文词典里查找“apple”,你下意识里翻开词典是翻前面的书页还是后面的书页呢?如果再查“zoo”,你又会怎么查?显然你不会从词典中间开始查起,而是有一定目的地往前或往后翻。同样,比如要在取值范围在 0 ~ 10000 之间的100个元素从小到大均匀分布的数组中查找5,我们自然而然地先考虑数组原创 2016-11-06 22:33:39 · 1083 阅读 · 0 评论 -
PHP实现排序算法----希尔排序(Shell Sort)
基本思想:希尔排序是指记录按下标的一定增量分组,对每一组使用 直接插入排序 ,随着增量逐渐减少,每组包含的关键字越来越多,当增量减少至 1 时,整个序列恰好被分成一组,算法便终止。操作步骤:先取一个小于 n(序列记录个数) 的整数 d1 作为第一个增量,把文件的全部记录分组。所有距离为 d1 的倍数的记录放在同一个组中。先在各组内进行 直接插入排序;然后,取第二个增量 d2 < d1 重复上述的分组原创 2016-11-08 19:04:51 · 3316 阅读 · 1 评论 -
PHP二叉树(一):二叉搜索树
关于二叉搜索树的原理网上的资源就挺多的,而且情况有点小复杂,所以在这里我就不再陈述了,直接上代码吧:#bst.php 文件<?php/** * author:zhongjin * time:2016/10/20 11:53 * description: 二叉查找树 *///结点class Node{ public $key; public $parent; p原创 2016-10-26 21:34:04 · 4102 阅读 · 0 评论 -
PHP实现排序算法----堆排序(Heap Sort)
算法引进:在这里我直接引用《大话数据结构》里面的开头:在前面讲到 简单选择排序 ,它在待排序的 n 个记录中选择一个最小的记录需要比较 n - 1 次,本来这也可以理解,查找第一个数据需要比较这么多次是正常的,否则如何知道他是最小的记录。可惜的是,这样的操作并没有把每一趟的比较结果保存下来,在后一趟的比较重,有许多比较在前一趟已经做过了,但由于前一趟排序时未保存这些比较结果,所以后一趟排序时又重复执原创 2016-11-08 21:13:33 · 4653 阅读 · 1 评论 -
一致性 Hash 算法学习(分布式或均衡算法)
简介:一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似。一致性哈希修正了CARP使用的简单哈希算法带来的问题,使得分布式哈希(DHT)可以在P2P环境中真正得到应用。 场景引入:比如你有 N 个 cache 服务器(后面简称 cache ),那么如何将一个对象 object 映射到 N 个转载 2016-12-15 20:17:54 · 7647 阅读 · 5 评论 -
PHP实现排序算法----基数排序(Radix Sort)
基数排序在《大话设计模式》中并未讲到,但是为了凑齐八大排序算法,我自己通过网络学习了这个排序算法,并给大家分享出来。基本思想:基数排序(radix sort)属于“分配式排序”(distribution sort),又称“桶子法”(bucket sort)或bin sort,顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些“桶”中,藉以达到排序的作用,基数排序法是属于稳定性的排序,其时间复原创 2016-11-23 20:29:14 · 1778 阅读 · 0 评论 -
单链表排序
前言:最近总结了一下针对只有头结点的单链表进行排序的几个简单的方法。交换节点:插入排序,冒泡排序,简单选择排序 交换数据:快速排序初始化:#include <stdio.h>#include <stdlib.h>#include <stdbool.h>//节点结构struct node{ int val; struct node * next;};typedef str转载 2017-09-03 20:38:22 · 52289 阅读 · 17 评论 -
PHP实现排序算法----归并排序(Merging Sort)
基本思想:归并排序:就是利用归并(合并)的思想实现的排序方法。它的原理是假设初始序列含有 n 个元素,则可以看成是 n 个有序的子序列,每个子序列的长度为 1,然后两两归并,得到 ⌈ n / 2⌉ (⌈ x ⌉ 表示不小于 x 的最小整数)个长度为 2 或 1 的有序序列;再两两归并,······,如此重复,直至得到一个长度为 n 的有序序列为止,这种排序方法就成为 2 路归并排序。一、归并的过程:原创 2016-11-27 13:47:14 · 8467 阅读 · 1 评论 -
PHP实现排序算法----快速排序算法优化
本篇博客主要是谈谈对前面 《PHP实现排序算法—-快速排序(Quick Sort)、快排》的优化问题,如果大家之前没有看过该篇博客,那么必须回去看看,因为这篇博客就是以前一篇博客为基础的。优化一:优化选取枢轴:在前面的复杂度分析的过程中,我们看到最坏的情况无非就是当我们选中的枢轴是整个序列的边缘值。比如这么一个序列:9 1 5 8 3 7 4 6 2按照习惯我们选择数原创 2016-11-23 22:56:00 · 3751 阅读 · 0 评论 -
PHP有序表查找----二分查找(折半)
简介:二分查找技术,又称为折半查找。它的前提是线性表中的记录必须是关键码有序(通常从小到达有序),线性表必须采用顺序存储。基本思想:在有序表中,取中间记录作为比较对象,若给定值与中间记录的关键字相等,则查找成功;若给定值小于中间记录的关键字,则在中间记录的左半区继续查找;若给定值大于中间记录的关键字,则在中间记录的右半区继续查找。不断重复上述过程,直到查找成功,或所有查找区域无记录,查找失败为止。代原创 2016-11-06 22:09:22 · 1437 阅读 · 0 评论 -
PHP有序表查找----斐波那契查找
前言:在前面我们介绍了二分查找、插值查找。其中的插值查找是对二分查找的改进。同样,本篇博客的主角—-斐波那契查找,也是对二分查找的改进(利用黄金分割原理)。由于这个过程分析较之前的复杂,大家可以百度。代码:<?php//斐波那契查找 利用黄金分割原理//算法核心://1、当$num==$arr[$mid],查找成功//2、当$num < $arr[$mid],新范围是第$low个到$mid-1个原创 2016-11-06 22:44:50 · 571 阅读 · 0 评论 -
PHP二叉树(二):平衡二叉树(AVL)
关于平衡二叉树的原理网上的资源就挺多的,而且情况有点小复杂,所以在这里我就不再陈述了,直接上代码吧:<?php/** * author:zhongjin * time:2016/10/20 11:53 * description: 平衡二叉树 *///结点class Node{ public $key; public $parent; public $left原创 2016-10-26 21:43:54 · 2043 阅读 · 1 评论 -
PHP二叉树(三):红黑树
关于红黑树的原理网上的资源就挺多的,而且情况有点小复杂,所以在这里我就不再陈述了,直接上代码吧:<?php/** * author:zhongjin * time:2016/10/20 11:53 * description: 红黑树 *///结点class Node{ public $key; public $parent; public $left;原创 2016-10-26 21:53:56 · 3557 阅读 · 0 评论 -
PHP实现排序算法----冒泡排序(Bubble Sort)
基本思想:冒泡排序是一种交换排序,它的基本思想是:两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为止。简单交换排序:我们先来看看在没有学习各种排序方法前经常使用的排序方法(至少我是这样。。。。)://这里使用了类型提示(type hint) array,不熟悉或者不习惯的同学大可去掉,不影响运算结果function MySort(array &$arr){ $length =原创 2016-11-07 21:01:36 · 7547 阅读 · 0 评论 -
PHP实现排序算法----简单选择排序(Simple Selection Sort)
基本思想:通过 n - i 次关键字间的比较,从 n - i + 1 个记录中选出关键字最小的记录,并和第 i (1 <= i <= n) 个记录交换,执行n-1趟 后就完成了记录序列的排序。算法实现:<?php//简单选择排序//交换函数function swap(array &$arr,$a,$b){ $temp = $arr[$a]; $arr[$a] = $arr[$b];原创 2016-11-07 21:49:20 · 1524 阅读 · 0 评论 -
PHP实现排序算法----直接插入排序(Straight Insertion Sort)
算法引入:在这里我们依然使用《大话数据结构》里面的一个例子: 扑克牌是我们几乎每个人都玩过的游戏。平时我们开始的时候一般都是一个人发牌,其他人都是一边摸牌,一边理牌,假如你摸上的第一张牌是 5,第二张牌是 3,自然而然的我们把 3 插到 5 的前面;第三张牌是 4,查到 3 和 5 的中间;第四张牌是 6,放到 5 的后面;第五张牌是 2,插到 3 的前面;……。最后当我们摸完所有的牌时,手上的原创 2016-11-07 22:27:22 · 3056 阅读 · 2 评论 -
PHP实现排序算法----快速排序(Quick Sort)、快排
基本思想:快速排序(Quicksort)是对冒泡排序的一种改进。他的基本思想是:通过一趟排序将待排记录分割成独立的两部分,其中一部分的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行快速排序,整个排序过程可以递归进行,以达到整个序列有序的目的。基本算法步骤:举个栗子: 假如现在待排序记录是:6 2 7 3 8 9第一步、创建变量 $low 指向记录中的第一个记录原创 2016-11-23 21:56:35 · 10416 阅读 · 0 评论 -
尾递归的学习
递归与尾递归总结 前言:今天上网看帖子的时候,看到关于尾递归的应用(http://bbs.csdn.net/topics/390215312),大脑中感觉这个词好像在哪里见过,但是又想不起来具体是怎么回事。如是乎,在网上搜了一下,顿时豁然开朗,知道尾递归是怎么回事了。下面就递归与尾递归进行总结,以方便日后在工作中使用。1、递归 关于递归的概念,我们都不陌生。简单的来说递归就是一个函数直接或间接地转载 2017-08-29 09:44:51 · 658 阅读 · 0 评论