随笔分类 - Algorithm
摘要:布隆过滤器是Bit-Map的一种扩展。 如果判断一个元素是否在一个集合中,通常的做法是将所有元素保存起来,然后通过比较知道他是否在集合中。 布隆过滤器的做法是申请一个N位的位图数组与K个哈希函数,K个哈希函数都可以将元素映射到位图中0-N的位置上, 对每一个元素使用K的哈希函数,将每次映射结果对应的
阅读全文
摘要:背景QAQ 最近在准备找工作,以前就听说过并查集,一直没有深入了解,今天就仔细分析一下并查集,如果有漏洞请多多指教 概念 并查集就是一种树形结构,主要是用来处理一些不相交集合的合并及查询问题。 那么是怎么处理的呢。 首先要求集合中的元素不相同,其次要求可以识别出某个集合。这就需要我们找出一个集合中的
阅读全文
摘要:一维前缀和 主要用于在O(1)时间内找出A[i]+A[i+1]+...+A[j]的和 原理: 用sum[i]表示A[1]+A[2]+...+A[i],则sum[0] = 0, sum[1] = A[1], sum[2] = A[1]+A[2]; sum[3]=A[1]+A[2]+A[3]; 则A[i
阅读全文
摘要:选择排序的概念 选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。 选择排序的主要特点与数据
阅读全文
摘要:二分搜索定义 二分搜索算法是一种在有序数组中查找某一特定元素的搜索算法。搜索过程中从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较,如果在某一步骤数组为空,则代表找不到
阅读全文
摘要:给定一个字符串,要求把字符串前面的若干字符移动到字符串尾部。 解法一:蛮力法 首先想考虑将一个字符移到尾部的方法。代码如下: 如果要移动m个字符串,则依次对函数LeftShiftOne执行m次即可。代码如下: 时间复杂度:将一个字符移动到尾部需要n次操作,如果要移动m个字符,则需要操作m * n次。
阅读全文
摘要:问题:将一个n元一维向量向左旋转i个位置。例如,当n=8且i=3时,向量abcdefgh旋转为defghabc。简单的代码使用一个n元中间量在n步内完成该工作,你能否仅使用数十个额外字节的存储空间,在正比于n的时间内完成向量的旋转? Brute Algorithm:将需要移动的字符串x前i个元素复制
阅读全文
摘要:1 蛮力算法 1.1 算法描述 蛮力串匹配是最直接最直觉的方法。可假想地将文本串和模式串分别写在两条印有等间隔方格的纸带上,文本串对应的纸带固定,模式串纸带的首字符与文本串纸带的首字符对齐,两个都沿水平方向放置。于是,只需将P(长度m)与T(长度n)中长度为m的n - m + 1个子串逐一对比,即可
阅读全文