![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法与数据结构
文章平均质量分 59
黄小猿
数学系的孩子,对人工智能有着极大的热情,让机器像人一样,学习提升,是挑战人类对大脑的认知底限,愿尽自己的绵薄之力,让这个世界更美好。
展开
-
peak finder(找峰点)
一维数组找峰点 FM(find middle,自己给算法起个名字,不知道中文叫啥) 第二个位置是一个峰点,当且仅当b>a,b>cb>a,b>c。如果i>hi>h,则第九个位置是峰点。 在大数据集上,试图找到一个峰点,返回他的索引,怎么找最好?最直接的其实就是遍历一遍数组,比较之后找到一个最大的。但我们的要求是找到一个峰点,并没有要求一定是最高点。 问:这样的方法是最好的吗?很明显不是原创 2017-11-17 15:20:10 · 4367 阅读 · 1 评论 -
图论算法初步-图的python实现
图的基本性质图的表示方法图的python实现图的基本性质图的分类:图可以分为有向图和无向图,如图为无向图: 另外,还可以将图分为有权图和无权图,权表示两个节点之间的某种关系,比如交通运输网络中两个地点的权值可以代表交通费用,如图为有向图: 连通性:有时候,可能有两个区域的交通路线是没有相连的,这就会产生很多不连通的区域,如图就是不完全连通的: 简单图...原创 2018-03-07 16:35:34 · 15435 阅读 · 4 评论 -
二分查找法(python实现与floor,ceil实现)
查找问题在计算机中的应用是非常广泛的,比如你到银行去查一下你的账户还有多少钱,这也是一个查找问题。二分查找法是比较基础的一种查找方法,但是它有一定的限制,只能在有序的数组中才能使用二分查找法,因此,使用二分查找法前,我们还要使用排序算法对数组进行排序。二分查找的想法也很简单,如图所示:取数组的中间元素v比较要查找的元素m,将数组进行对半划分,直到找到元素m为止#选择排原创 2018-01-29 12:50:20 · 869 阅读 · 1 评论 -
堆与堆排序,最大索引堆(python实现)
优先队列与堆最大堆的基本结构与实现基本操作1插入一个元素基本操作2取出一个元素初始化堆原地堆排序索引堆堆的拓展问题优先队列与堆普通的队列是先进先出,后进后出的。但对于优先队列来说,出队的顺序不取决于入队的顺序,而取决于他们的优先次序。最简单的优先队列案例就是医院的急诊病人,明明已经有病人在等候了,但急诊病人往往会优先,这其实就是优先队列。为什么要使用优原创 2018-01-28 22:21:00 · 2752 阅读 · 1 评论 -
二分搜索树-BST,python实现
为什么要用二分搜索树二分搜索树的定义二叉搜索树的基本功能初始化二分搜索树的节点插入元素查找元素深度优先遍历广度优先遍历删除操作要删除的节点没有孩子节点要删除的节点有两个孩子节点要删除的节点有一个孩子节点floor 和ceil操作为什么要用二分搜索树?二分搜索树最常用的场景就是查找表的实现,其实可以看成是字典的形式,这样的一对对数据,我们就可以原创 2018-01-30 14:43:19 · 2671 阅读 · 1 评论 -
十大排序算法
第一部分ON2的排序算法冒泡排序Bubble Sort1 冒泡排序原理2 冒泡排序算法步骤3 算法实现4 算法效率选择排序1 选择排序原理2 算法步骤3 算法实现插入排序1 插入排序原理2 算法步骤3 算法实现希尔排序1算法思想2 算法步骤3 算法实现第二部分NlogN算法归并排序merge sort1 算法思想2 算法步骤3 算法实原创 2017-12-01 16:34:36 · 1471 阅读 · 0 评论 -
链表,栈,队列
目录一些算法题 1.1 问题1:系统数数 1.2 问题2:战平即可出线 1.3 问题3:逻辑推理 1.4 问题4:天平与假币链表 2.1 链表相加 2.2 链表的部分翻转堆,栈队列1.一些算法题算法包罗万象推理,逻辑,“机智“演绎,归纳,类比严格归纳以上任何一种能力,都要用到,而且用熟, 如果合理利用,可以非常便利得减少时间复杂度和空间复杂度。看几个问题: 1.1原创 2018-01-08 16:48:42 · 476 阅读 · 0 评论 -
3.weighted quick union
上一篇文章介绍的2.quick find and quick union是基础版的,但是它无法处理大型数据集的动态连接,所以我们还要对其进行改进。weighted quick-union 1.1 基本思想 1.2 Java代码 1.3 python代码实现 1.4 复杂度分析weighted quick-union-改进2-压缩路径(path compression) 2.1 基本原理原创 2017-12-12 15:09:23 · 2595 阅读 · 0 评论 -
2.quick find and quick union
1.quick find对于下图的数组id[ ],如果他们有相同的id,说明他们是相连的。比如0-5-6是以0开头的,1-2-7是以1开头的,8-3-4-9是以8 开头的。我们查找的时候就可以查找他们的开头,看一下他们是不是有相同的开头,进而判断他们是否相连。quick find简单的说就是根据相连的部分,把相连的元素的id全部换成开头元素的ID,如下8-3-4的ID都换成了开头的8. 如此原创 2017-12-11 16:36:26 · 1326 阅读 · 0 评论 -
1.Dynamic Connectivity(动态连接)
怎么发现一个有用的算法?我们平时发现一个算法一般会遵循一下这几个步骤:遇到问题,试图发现这个问题的主要元素。然后找到解决这个问题的算法第一次写的算法(也许很快,也许很慢)但一般第一次写的算法都比较糟糕,这时候就找方法解决为什么会那么糟糕了找到使得算法变好的关键点不断迭代 Dynamic Connectivity寻找有没有连接两个点的路径,如下: 你发现又连接8-9的路径,但是没有原创 2017-12-08 15:37:29 · 1460 阅读 · 0 评论 -
Huffman Code(霍夫曼编码)原理及实例
假设有如下图的数据:数字表示每个词出现的次数。 我们根据每个词出现的频数,画出如下这样的图。其实就是先从最小的频数出发,比如F,H,出现的是1,而他们两个加起来就是2,因此他们的上一节点就是2。以此一直构造出了这个图。 然后再从顶点开始编码,左边为0,右边为1,这样出现的频次最多的编码就是最短的。 但一般做的是编码词或句子:The essential featureThe\ essential原创 2017-11-28 22:55:56 · 8875 阅读 · 0 评论 -
图的遍历(python实现)
深度优先遍历深度优先遍历深度优先遍历顾名思义就是一条路走到黑,如图所示,从0开始遍历,遍历他的邻边1,当遍历1时,发现他的邻边0已经遍历了,所以这条路已经走到头了,所以回过头来遍历2。 整个遍历的顺序如下: 使用深度优先遍历,查看图有多少个连通分量。class ComponentsCounter(object): def __init__(...原创 2018-03-11 20:32:59 · 9332 阅读 · 0 评论