文章分类 - 算法与数据结构基础
摘要:转载:https://blog.csdn.net/qq_26399665/article/details/52969352 正常的map默认按照key值排序,而map又没有像vector一样的sort()函数,那么如果将map按照value值排序呢? 将map中的key和value分别存放在一个pa
阅读全文
摘要:常用的几个排序 冒泡排序 void BubbleSort(vector<int>& vec) { for (int i = 0; i < vec.size() -1 ; i++) { for (int j = 0; j < vec.size() - 1; j++) { if (vec[j] < ve
阅读全文
摘要:一般的DFS模板 void DFS(int graph[][], int used[], int x, int y) { // 1、如果与目标坐标相同,则成功 if (graph[x][y] == graph[goal_x][goal_y]) { printf("successful"); flag
阅读全文
摘要:转载:https://zhuanlan.zhihu.com/p/24986203 搜索思想——DFS & BFS DFS(Deep First Search)深度优先搜索。 BFS(Breath First Search)广度优先搜索。 今天想说一说个人对于这两个搜索方法的见解。在我看来,DFS与B
阅读全文
摘要:200. 岛屿数量 给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。 示例 1: 输入:11110110101100000000 输出: 1示例 2: 输入:11000
阅读全文
摘要:汉诺塔 汉诺塔 这其实也是一个经典的递归问题 我们可以做这样的考虑: 先将前63个盘子移动到Y上,确保大盘在小盘下。 再将最底下的第64个盘子移动到Z上。 最后将Y上的63个盘子移动到Z上。 这样子看上去问题就简单一点了,但是关键在于第1步和第3步应该如何执行呢? 在游戏中,我们发现由于每次只能移动
阅读全文
摘要:质数(prime number)又称素数,有无限个。质数定义为在大于1的自然数中,2是最小的素数。除了1和它本身以外不再有其他因数的数称为质数。
阅读全文
摘要:字符串匹配(string match)是在实际工程中经常会碰到的问题,通常其输入是原字符串(String)和子串(又称模式,Pattern)组成,输出为子串在原字符串中的首次出现的位置。通常精确的字符串搜索算法包括暴力搜索(Brute force),KMP, BM(Boyer Moore), sun
阅读全文
摘要:B-树 是一种多路搜索树(并不是二叉的): 1.定义任意非叶子结点最多只有M个儿子;且M>2; 2.根结点的儿子数为[2, M]; 3.除根结点以外的非叶子结点的儿子数为[M/2, M]; 4.每个结点存放至少M/2-1(取上整)和至多M-1个关键字;(至少2个关键字) 5.非叶子结点的关键字个数=
阅读全文
摘要:Hash算法 Hash可以通过散列函数将任意长度的输入变成固定长度的输出,也可以将不同的输入映射成为相同的相同的输出,而且这些输出范围也是可控制的,所以起到了很好的压缩映射和等价映射功能。等价映射这一特性在海量数据解决方案中起到相当大的作用,特别是在整个MapReduce框架中,下面章节会对这二方面
阅读全文
摘要:一. 原题重现 2015年9月27日百度笔试论述题二选一,其中第一道是关于MapReduce相关的;第二道是搜索引擎中url去重,海量数据集url如何在爬取过程中避免重复爬取过的url。 PS:通常搜索引擎网页去重是通过文档特征提取,再计算相似性或集合Hash实现。 下面是常见的题型: 1.Hash
阅读全文
摘要:1 #define _CRT_SECURE_NO_WARNINGS 2 #include 3 #include 4 #include 5 using namespace std; 6 7 //二叉树节点的描述 8 typedef struct BiTNode 9 { 10 char data; 11 struct BiTNode *...
阅读全文
摘要:堆排序 Heap Sort 堆排序是一种选择排序,其时间复杂度为O(nlogn)。堆排序(Heap Sort)只需要一个记录元素大小的辅助空间(供交换用),每个待排序的记录仅占有一个存储空间。 堆的存储 一般用数组来表示堆,若根结点存在序号0处, i结点的父结点下标就为(i-1)/2。i结点的左右子
阅读全文
摘要:希尔排序的实质就是分组插入排序,该方法又称缩小增量排序,因DL.Shell于1959年提出而得名。 该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进
阅读全文
摘要:快速排序采用的思想是分治思想。 快速排序是找出一个元素(理论上可以随便找一个)作为基准(pivot),然后对数组进行分区操作,使基准左边元素的值都不大于基准值,基准右边的元素值 都不小于基准值,如此作为基准的元素调整到排序后的正确位置。递归快速排序,将其他n-1个元素也调整到排序后的正确位置。最后每
阅读全文
摘要:归并排序法是利用递归和分治技术,将数据序列划分为越来越小的半子表,再对半子表排序,最后再用递归步骤将排好序的半子表合并为越来越大的有序序列。 其中,“归”代表的是递归的意思,即递归地将数组折半地分离为单个数组。例如:数组[2,6,1,0]会先折半,分为[2,6]和[1,0]两个数组,然后再次折半,将
阅读全文
摘要:思想: 冒泡排序的思想很简单,就是以此比较相邻的元素大小,将小的前移,大的后移,就像水中的气泡一样,最小的元素如同气泡一样,会最终浮到水面上。 代码: 算法复杂度 O(n²)
阅读全文
摘要:思想: 对于给定的一组记录,初始时假定第一个记录自成一个有序序列,其余的记录为无序序列;接着将第二个记录插入之前的有序序列中;以此类推。 核心思想在于找到要插入的位置。就像抓牌一样,新的牌要插到哪儿才是核心。 代码: 插入排序法的时间复杂度为 O(n²)。 插入排序法是稳定的:插入过程中,遇到与插入
阅读全文
摘要:思想: 还是先来看看选择排序的思想。选择排序的思想非常直接,不是要排序么?那好,我就从所有序列中先找到最小的,然后放到第一个位置。之后再看剩余元素中最小的,放到第二个位置……以此类推,就可以完成整个的排序工作了。可以很清楚的发现,选择排序是固定位置,找元素。相比于插入排序的固定元素找位置,是两种思维
阅读全文

浙公网安备 33010602011771号