JoeChenzzz

导航

随笔分类 -  数据结构和算法

1 2 下一页

字典树
摘要:1.概念 1)Trie树,又称字典树,单词查找树或者前缀树,是一种用于快速检索的多叉树结构,如小写英文字母的字典树是一个26叉树,数字的字典树是一个10叉树 2)Trie树利用字符串的公共前缀来节约存储空间,字典树存放具有公共前缀的字符串们非常节省空间,相反,对于大量没有公共前缀的字符串,用字典树存 阅读全文

posted @ 2019-03-22 08:19 JoeChenzzz 阅读(502) 评论(0) 推荐(0)

单例模式
摘要:1.概念 1)单例模式就是一个类只能被实例化一次 ,更准确的说是只能有一个实例化对象的类 2)为什么要有单例模式:一则,解决多线程并发访问的问题;二则节约系统资源 例如,一个系统中可以存在多个打印任务,但是只能有一个正在工作的打印任务 如在Windows中就只能打开一个任务管理器,如果不使用机制对窗 阅读全文

posted @ 2019-03-14 17:54 JoeChenzzz 阅读(309) 评论(0) 推荐(0)

统计在线人数
摘要:1.题目 求一个论坛的在线人数,假设有一个论坛,其注册ID有两亿个,每个ID从登陆到退出会向一个日志文件中记下登陆时间和退出时间,要求写一个算法统计一天中论坛的用户在线分布,取样粒度为秒。 2.分析 1)一天总共有 60 * 60 * 24 = 86400秒 2)定义一个长度为86400的整数数组i 阅读全文

posted @ 2019-03-14 10:02 JoeChenzzz 阅读(354) 评论(0) 推荐(0)

哈希表
摘要:1.概念 1)哈希表(散列表)是一种根据关键字 key 去寻找值 value 的数据映射结构 2)哈希表通过一个函数把key映射到表上的一个位置(哈希地址)来存储,以加快下一次查找的速度,这个函数就叫哈希函数 3)所以说,哈希技术既是一种存储技术,也是一种查找技术 2.哈希冲突 1)对不同的关键字可 阅读全文

posted @ 2019-01-18 12:08 JoeChenzzz 阅读(192) 评论(0) 推荐(0)

top k问题
摘要:1.top k问题 在海量数据处理中,经常会遇到的一类问题:在海量数据中找出出现频率最高的前k个数,或者从海量数据中找出最大的前k个数,这类问题通常被称为top K问题。例如,在搜索引擎中,统计搜索最热门的10个查询词;在歌曲库中统计下载最高的前10首歌等 2.实例 2.1从N个无序数中寻找Top- 阅读全文

posted @ 2019-01-17 16:46 JoeChenzzz 阅读(1450) 评论(0) 推荐(0)

位图法bitmap
摘要:1.概念 1)所谓bitmap,就是用每一位(bit)来标记某个元素对应的value, 而key即是该元素,通常bitmap是一个int数组,用每一个int数的每一个bit来映射某个数据 2)由于采用了Bit为单位来存储数据,因此可以大大节省存储空间,适用于海量数据,且每个数据的状态(value)又 阅读全文

posted @ 2019-01-16 12:35 JoeChenzzz 阅读(714) 评论(0) 推荐(0)

经典倒水问题
摘要:倒水问题 有两个容器,容积分别为a升和b升,有无限多的水,现在需要c升水。 问能否通过有限次的倒水操作,得到c升水? 解析 这类题有一个套路,小容量的杯子不断往大杯子里面倒水,大杯子满了之后就把大杯子全倒掉。先举个简单的例子,比如:3升和5升的杯子,得到4升水,下面步骤中的第一个数字表示3升杯子中的 阅读全文

posted @ 2019-01-16 10:04 JoeChenzzz 阅读(1844) 评论(0) 推荐(0)

中缀表达式和逆波兰表达式
摘要:1.中缀表达式 1)标准四则运算的表达式就叫中缀表达式 2.逆波兰表达式 1)逆波兰表达式(后缀表达式):字符串中只有数字和运算符,没有括号,所有运算符号位于操作数之后 3.中缀表达式转逆波兰表达式 1)运算符优先级:乘除大于加减,右括号必须匹配左括号 2)遍历中缀表达式,遇到数字,输出到后缀表达式 阅读全文

posted @ 2018-10-07 14:47 JoeChenzzz 阅读(440) 评论(0) 推荐(0)

贪心算法和动态规划的区别与联系
摘要:联系 1.都是一种推导算法 2.都是分解成子问题来求解,都需要具有最优子结构 区别 1.贪心:每一步的最优解一定包含上一步的最优解,上一步之前的最优解则不作保留; 动态规划:全局最优解中一定包含某个局部最优解,但不一定包含前一个局部最优解,因此需要记录之前的所有的局部最优解 2.贪心:如果把所有的子 阅读全文

posted @ 2018-09-27 23:05 JoeChenzzz 阅读(23700) 评论(0) 推荐(2)

深度优先搜索DFS和广度优先搜索BFS
摘要:DFS简介 深度优先搜索,一般会设置一个数组visited记录每个顶点的访问状态,初始状态图中所有顶点均未被访问,从某个未被访问过的顶点开始按照某个原则一直往深处访问,访问的过程中随时更新数组visited,碰到已访问的顶点则回溯到前一顶点按原则选择另一条路径走,如果无路可走时则再次回溯,坚持此原则 阅读全文

posted @ 2018-09-27 20:47 JoeChenzzz 阅读(390) 评论(0) 推荐(0)

摘要:1.定义 图由有限个顶点和它们之间的边组成 2.图的存储结构 2.1邻接矩阵 1)邻接矩阵用两个数组表示图,一个一维矩阵存储顶点,一个二维数组(称为邻接矩阵)存储边,其元素值为边的权值,如果不存在这条边则计为无穷大(可以是INT_MAX),自己到自己的边值为0 2)邻接矩阵对于边数相对顶点数较少的图 阅读全文

posted @ 2018-09-27 17:02 JoeChenzzz 阅读(262) 评论(0) 推荐(0)

分治法
摘要:概念 将一个大规模的问题分解为若干小规模的相同的子问题,分而治之。 能利用分治法解决的问题有3个特性 1.原问题可以分解为若干小规模的相同的子问题 2.子问题相互独立 3.子问题的解可以合并为原问题的解 使用分治法的步骤 自顶向下分解成相同且独立的子问题,治理子问题,再向上合并子问题的解来得到原问题 阅读全文

posted @ 2018-09-20 22:52 JoeChenzzz 阅读(210) 评论(0) 推荐(0)

动态规划
摘要:概念 动态规划也是一种分治思想,但是与分治法不同,动态规划把原问题分解为若干子问题,然后自底向上,先求解最小的子问题,把结果存储在表格中,再求解大的子问题时,直接从表格中查询小的子问题的解,最终得到原问题的解。 能利用动态规划解决的问题有2个特性 1.最优子结构 问题的最优解包含其子问题的最优解 2 阅读全文

posted @ 2018-09-20 22:50 JoeChenzzz 阅读(179) 评论(0) 推荐(0)

排序算法的比较
摘要:1.内排序和外排序 1)内排序:要排序的数据全部放在内存中 2)外排序:要排序的数据太多,不能同时放在内存中,整个排序过程需要在内存和硬盘之间进行多次数据交换 2.稳定性 如果序列中有两个元素相等,排序结束后,能够保证他们原有的相对顺序不变,那这种排序算法就是稳定的。 3.常见排序算法的稳定性 稳定 阅读全文

posted @ 2018-09-17 21:22 JoeChenzzz 阅读(385) 评论(0) 推荐(0)

快速排序
摘要:思想 1)快排是冒泡的升级,都是交换排序类,它增大了元素比较和交换的距离,将值较大的元素直接从前面换到后面,值比较小的元素直接从后面换到前面,而不是相邻相邻地换,从而减少了比较和交换的次数 2)每一轮排序,先选出一个枢轴,让比枢轴小的元素放在枢轴的左边,比枢轴大的元素放在枢轴的右边,再把序列分成按枢 阅读全文

posted @ 2018-09-16 17:05 JoeChenzzz 阅读(235) 评论(0) 推荐(0)

堆排序
摘要:图片转载自:https://www.cnblogs.com/chengxiao/p/6129630.html 思想 1)堆排序是直接选择排序的改进,同属选择排序类 2)堆是具有以下性质的完全二叉树:每个节点的值都大于等于其左右孩子节点的值,称为大顶堆(最大堆);或者每个节点的值都小于等于其左右孩子节 阅读全文

posted @ 2018-09-16 17:04 JoeChenzzz 阅读(184) 评论(0) 推荐(0)

希尔排序
摘要:图片转载自:https://blog.csdn.net/weixin_37818081/article/details/79202115 1.几个名词解释 1)增量(步长):待处理的序列中每个元素间的距离,可自行设置 增量设置的规则: 1.常用规则:increment = increment / 3 阅读全文

posted @ 2018-09-16 16:58 JoeChenzzz 阅读(263) 评论(0) 推荐(0)

直接插入排序
摘要:思想 首先要明确的是,已排序序列在前,待排序序列在后,第一轮的待排序序列就是整个序列,每一轮将待排序序列中的首位元素插入到已排序序列的合适位置处,待排序序列元素个数减1,已排序序列元素个数加1,直到插完所有元素 代码实现 void sortInsert(vector<int> &nums) { in 阅读全文

posted @ 2018-09-14 16:57 JoeChenzzz 阅读(147) 评论(0) 推荐(0)

直接选择排序
摘要:思想 首先要明确的是,已排序序列在前,待排序序列在后,第一轮的待排序序列就是整个序列,每一轮在待排序序列中选出本轮最小的元素放在待排序序列的首位,然后将这个首位纳入已排序序列,待排序序列元素数目相应减1;不断重复上述操作,直到已排序序列长度为数组长度 代码实现 时间复杂度 最好情况O(n2),最坏情 阅读全文

posted @ 2018-09-14 16:46 JoeChenzzz 阅读(134) 评论(0) 推荐(0)

冒泡排序
摘要:思想 首先要明确的是,已排序序列在后,待排序序列在前,第一轮的待排序序列就是整个序列;每一轮都从待排序序列首部开始,比较相邻元素,如果前一个元素比后一个元素大,则交换两元素的位置,这么一轮下来,本轮最大的那个元素就到了末尾,成为已排序序列,待排序序列的元素个数相应减1,不断重复,最终达到完全有序 代 阅读全文

posted @ 2018-09-14 16:00 JoeChenzzz 阅读(133) 评论(0) 推荐(0)

1 2 下一页