简单算法
Alpaca00
这个作者很懒,什么都没留下…
展开
-
哈希表简介以及哈希挂链方法
哈希表简介对于数据判重的问题,我们可以遍历所有数据,看看是否重复,那么复杂度是O(n)O(n)O(n)。或者如果数据存储是有序性,那么可以用二分查找的方法来看是否重复,复杂度O(logn)O(log n)O(logn),但是为了维护有序,要付出额外的复杂度。如果数据够小甚至能用桶排的下标法,复杂度为O(1)O(1)O(1)。那么有没有一个能兼顾存储复杂数据,维护代价小且时间复杂度小的方法呢,那...原创 2020-02-02 22:00:25 · 613 阅读 · 0 评论 -
并查集代码介绍
并查集代码介绍并查集是一个利用无向图的性质来确定集合关系的简单算法。可以用来确定某两个元素是否在同一个集合,或者也可以用来查询是否在无向图中构成了环。查询速度很快,代码也很短,是一个简单的算法。(只是复杂度不太好确定)确定一个集合的方法是将所有该集合中的根节点都确定为该集合中的唯一一个。当某两个元素在同一集合时,他们一定都有同一个根节点。这里介绍用数组实现的方法。parent数组的初始化...原创 2020-01-23 22:00:14 · 274 阅读 · 1 评论 -
归并排序
归并排序归并排序是利用分治算法的一个典型例子,并且利用了二路归并算法,二路归并就是将两个有序数组合并成一个有序数组的过程,先介绍二路归并算法。以升序数组为例,假设已经有两个排好序的数组。 a 1 3 4 4 7 11 b 2 5 6 8 8二路归并的思想就是先新建一个数组c,然后比较两个有序数组开头的元素大小,将小的先放入c数组,然后再比较再放入,直到全部放完为止...原创 2020-01-23 21:21:28 · 212 阅读 · 1 评论 -
尺取算法
尺取算法与递推尺取算法又名毛毛虫算法,就是指利用之前求出的内容与这个需要求的内容的重合部分,来尽量避免重复工作,已达到尺取(只取一点点),或者说像毛毛虫一样移动。其实这本质上有点类似于线性的递推(去考虑f(n)f(n)f(n)与f(n−1)f(n-1)f(n−1)的关系),更多的说是利用尺取的思想来避免重复工作(通常也用于优化暴力枚举),而不是单独说这个算法。举个例子:有一数列an={a1...原创 2020-01-18 20:57:53 · 598 阅读 · 0 评论 -
快速幂及快速幂取余
快速幂及快速幂取余快速幂当遇到求ana^nan这种问题时,可以将指数n拆开于是变成(a2)n/2(a^2)^{n/2}(a2)n/2。然后重复将n除2,底数平方,直到指数为0为止就是结果。于是解决这题的时间复杂度从O(n)O(n)O(n)(普通循环相乘a的做法)到了O(logn)O(logn)O(logn)。这就是快速幂算法,本身还是挺简单的,主要思想就是让底数变大,指数不断缩小。唯一要考...原创 2020-01-16 02:57:31 · 307 阅读 · 0 评论