并查集
并查集在讲并查集之前,我们先思考一个问题,假设幼儿园小班有六个小朋友,分别为小a,小b,小c,小d,小e,小f,但并不是每个人都是朋友, 我们规定朋友的朋友也是朋友,例如小a和小b是朋友,小b和小c也是朋友,那么小c和小a同样也是朋友。现在要求一共有几个朋友圈。 已知小a和小b是朋友,小d和小e是朋友,小e和小f是朋友。我们很容易能够确认小a和小b是一个朋友圈,小d,小e以及小f是一个朋友圈,而小c自己一个人一个朋友圈。
因为人数很少,我们能够很轻易地判断有几个朋友圈,但当人数很多的时候呢,我们不能每个都去遍历,去数有多少个朋友圈。这就需要我们本次的知识——并查集。
并查集我们通过构建树状结构来实现,在这里我们分析上面的例子,首先在条件未知的情况下,我们让每个人都自己一个人为一个朋友圈,如下图:
在初始情况下,每个小朋友自己一个人为一个朋友圈,在上面我们说了,并查集通过树状结构实现,所以就需要根节点,初始状态下,根结点就是他们本身。现在我们接入第一个条件,即小a和小b是朋友,能够确认的是把小a和小b连接起来,但问题是如何连接——答案是分别寻找他们的根节点,然后把他们的根节点连接起来, ...
二分查找
二分查找二分查找又叫折半查找,需要注意的是二分查找需要数列是有序的,如果查找到需要的数,返回所在位置,否则返回NULL。
如一个升序长度为7的数组a[7],分别为1,2,3,4,5,6,7,如下图:如果查找大小为5的值所在的位置,过程如下:首先设置两个变量,分别为left = 0,right = 6,left这个参数表示左边端点,right表示右边端点,因为数组的下表是从0开始的,所以right = 6。然后开始查找,查找left,right的平均值mid,即mid=(left + right)/2,然后把a[mid]与需要查找的值5比较,若a[mid] < 5,则太小了,修改left的值,让left = mid + 1;若a[mid] > 5,则表明查找的数值过大,这是right = mid - 1;若a[mid] = 5,则说明此时的mid即使5在数组中的位置。所以第一次查找的mid =(0+6)/2= 3,a[mid] = a[3] = 4 ...
深度优先搜索和广度优先搜索
深度优先搜索(DFS)顾名思义,深度优先搜素的就在于”深度”二字,通俗来讲,DFS就是从一个起始点开始,找到一个连接点进入一直进入下去直到没有节点,若找到最后一个节点没有子节点且还存在点没有遍历,则回到上一个节点,继续寻找节点,直到遍历完所有的点。
下图是一个无向图:
如上图所示,从节点1开始遍历,使用DFS算法,节点1有三个子节点,分别为节点2,3,4,因为这里我们没有定义两个节点之间的距离,所以任意选择下一个节点,这里我们选择先进入节点2,如图所示:
到达节点2之后,与节点2相连的点为1,5,7,但需要注意的是不可能选择节点1,因为节点1已经走过了,所以我们要选择节点5或者节点7,这里我们选择节点5,如下图所示:
到节点5的时候,发现节点5没有其他相连的节点了,节点2已经记录走过了,所以不能再走节点2。这个时候我们就要进行回溯,回溯之后,我们又回到节点2,需要注意的是这里的回到节点2,是回到上一步,而不是在走一次节点2,可以理解为”撤回”操作。
这里为了方便理解,在图像里面我用箭头表示,但需要注意的是算法的原理并不是这样,是回溯
如图所示:
然后我们又回到节点2,继续寻找与 ...
markdown 的基本语法
Markdown是一种轻量级标记语言,排版语法简洁,让人们更多地关注内容本身而非排版。 它使用易读易写的纯文本格式编写文档,可与HTML混编,可导出 HTML、PDF 以及本身的 .md 格式的文件。因简洁、高效、易读、易写,Markdown被大量使用,如Github、Wikipedia、简书等。
总体来说,MarkDown语法简单且容易上手。
Markdown语法 markdown的标题用 # 号来表示,通过不同的 # 号的数量,来判断是几级标题。
12$ # 一级标题$ ## 二级标题
Markdown 粗体,斜体,删除线的用法粗体Markdown 里粗体的表示方法为在需要加粗的词语前后各添加两个 ‘*’
1$ **粗体**
斜体斜体的写法和粗体差不多,斜体是在词语前后只加一个’*’
1$ *斜体*
加粗倾斜从上面可以看到,’ ** ‘是粗体,’ * ‘ 是斜体,那么’***’就是加粗倾斜。
1$ ***加粗倾斜***
删除线删除线是在词语前后添加两个’~~’
1$ ~~删除线~~
引用语法Markdown 的用于语法用’>’来完成,如:
1$ > 这是一个引 ...