PHP实现的不同算法集合
项目地址github.com/PuShaoWei/....
每周至少一次提问和滥用。每周至少询问一次问题和虐待
简单的结构
├──Package
│ ├── Sort 排序篇
│ │ ├── BubbleSort.php 冒泡排序
│ │ ├── HeapSort.php 堆排序 大根堆
│ │ ├── MBaseSort.php 基数排序 MSD
│ │ ├── LBaseSort.php 基数排序 LSD
│ │ ├── QuickSort.php 快速排序
│ │ ├── ShellSort.php 希尔排序
│ │ ├── MergeSort.php 归并排序
│ │ ├── InsertSort.php 插入排序
│ │ └── SelectSort.php 选择排序
│ │
│ ├── Query 查找篇
│ │ ├── BinaryQuery.php 二分查找
│ │ ├── InseertQuery.php 插入查找
│ │ ├── FibonacciQuery.php 斐波那契查找
│ │ └── QulickQuery.php 快速查找
│ │
│ ├── Structure 数据结构
│ │ ├── StackExample.php 堆栈 先进后出 LIFO (Last In First Out)
│ │ ├── LinearChain.php 线性表 单链存储
│ │ └── LinearOrder.php 线性表 顺序存储
│ │
│ ├── Tools 小工具集
│ │ └── SystemSwitch.php 堆栈实现进制转换
│ │
│ └── Other 其他
│ ├── MonkeyKing.php 约瑟夫环
│ ├── DynamicProgramming.php 动态规划
│ ├── Fibonacci.php 斐波那契数列
│ ├── StealingApples.php 偷苹果求余
│ ├── HanoiGames.php 汉诺塔游戏
│ ├── BidirectionalQueue.php 双向队列
│ ├── ColorBricks.php 彩色砖块
│ ├── GetCattle.php 牛年求牛
│ ├── OnlyNumbers.php 求唯一数
│ ├── PokerGames.php 洗扑克牌
│ └── BigSmallReplace.php Hello World 输出 Olleh Dlrow
│
├──LICENSE
└──README.md
该怎么办?
记录自己理解算法,数据结构的过程,尽可能的简单全面以及详细,让算法学习运用灵活自如,加油(ง •̀_•́)ง
当然
用 PHP 实现算法并替代官方提供的函数是愚蠢的事情 .但这觉不代表斟酌算法就是件无意义的事 , 每个算法都是一种思想的结晶 , 学习优秀的思想 , 开拓思维
什么是算法?
简而言之,算法是任何明确定义的计算过程,它将某些值或集合作为输入并产生某些值或集合作为输出。这样,算法就是将输入转换为输出的一系列计算过程。资料来源:Thomas H. Cormen、Chales E. Leiserson (2009)、《算法导论第三版》。
简而言之,算法是用于解决特定任务的一系列步骤(是的,算法不仅由计算机使用,而且也由人类使用)。目前,一个高效的算法应该具有三个重要的属性:
- 它必须是有限的:如果你设计的算法试图无休止地解决问题,那么它是无用的。
- 必须有明确定义的指令:算法的每一步都必须明确定义,并且指令在每个场景中都必须明确。
- 这必须是有效的:一个算法是为了解决一个问题而设计的,那么它应该能够解决这个问题,并且能够证明该算法仅使用纸和铅笔就能收敛。
对数
log10100 相当于“100 乘以多少个 10”的问题。答案当然是 2
所以 log10100=2,即对数。16 = 4
运行时间
以二分查找为例。使用它可以节省多少时间?查一下诸葛狄就知道了。如果列表中有 100 个数字,您最多需要猜测 100 次。
也就是说,需要猜测的最大次数与列表的长度相同,称为线性时间。二分查找则不同。如果列表包含 100 个元素,则
最多需要 7 次猜测。如果列表包含 40 亿个数字,则最多需要 32 次猜测,并且分割搜索的运行时间是对数时间 O(log)
Big O 表示法
Big O 是表示速度有多快的特殊表示法算法是。有一个技巧,实际上你经常需要复制别人的代码。在这种情况下,知道这些算法快或慢
- 算法的运行时间以不同的速率增加
- 例如简单搜索和二分搜索之间的区别
元素简单搜索二分搜索 | |||
---|---|---|---|
100 个元素 | 100ms | 7 ms | |
10,000 个元素 | 10 s0 10 s 10 s 40 ms 0, 000 个元素 | 11 天 | 30 毫秒 |
- Large 表示算法的速度。例如,列表
n
包含一个元素。简单搜索必须检查每个元素,因此它必须执行n
次操作
大O
O
- Large 表示算法的速度。例如,列表
O意味着(n)。二分查找必须运行logn运算,使用大 O
表示为正常工作
数据
数据的逻辑结构主要有四种类型
数据结构存储方式数据元素之间的关系在计算机中有两种不同的表示方法——顺序表示和非顺序表示。由此衍生出两种存储方式,顺序存储结构和链式存储结构
数据的逻辑结构和物理结构密不可分 算法的设计取决于所选的逻辑结构和算法的实现在所使用的存储结构上 算法(Algoritm)是解决特定问题的方法(步骤),描述是有限的命令序列,每个命令代表一个或多个操作。 算法具有以下五个特征
算法和程序是两个不同的概念 计算机程序是使用某种编程语言对算法的具体实现。算法必须是可终止的这一事实意味着并非所有计算机程序都是算法。 评估好的算法有几个标准 更改算法 效率和存储要求:效率是指算法执行时间;存储需求是指算法执行过程中所需的最大存储空间。一般来说,这两者与任务范围相关 算法时间复杂度算法中基本操作的重复次数就是问题规模n特定函数的时间度量记为T(n) =O(f(n)),称为算法的渐近时间复杂度(Asymptotic Time Complexity),简称时间复杂度 算法空间复杂度指的是所需存储空间的衡量当编写算法程序并在计算机上运行它时。记为:S(n)=O(f(n)),其中n为任务大小 递归与循环简单对比:
共同进步、共同学习。 |
---|
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。