随笔分类 - 数据结构与算法
摘要:在实际工程中经常遇到这样的问题,在一起字符串里查找是否包含某个字符串,并且找到要找字符串所出现的位置。 让我们来举一个例子: 在上图中,字符串B是A的子串,B第一次在A中出现的位置下标是2(字符串的首位下标是0),所以返回 2。 字符串B在A中并不存在,所以返回 -1。 常见的算法包括:BF(Bru
阅读全文
摘要:优先队列和普通队列区别: 1. 普通队列:先进先出(FIFO)。 2. 优先队列:优先队列中出队列的顺序和乳队列的顺序无关,和队列中元素的优先级有关。 优先队列是贪心算法的重要组成部分,借助于优先队列贪心算法可以解决非常多的实际问题包括: 1. 旅行商TSP问题 2. 01背包问题 3. 霍夫曼编码
阅读全文
摘要:递归(Recursion)是一种计算过程,如果其中每一步都要用到前一步或前几步的结果,称为递归。在计算机算法中,则是方法本身调用自己方法的过程,它可将一个大问题一步步的化为小问题,直到可以直接求解计算,典型的问题就是汉诺塔。
阅读全文
摘要:链表也是一种线性表结构,和数组类似,是一种非常基础的数据结构。 链表定义 链表是一种线性表数据结构; 从底层存储结构上看,链表不需要一整块连续的存储空间,而是通过“指针”将一组零散的内存块串联起来使用; 链表中的每个内存块被称为链表的“结点”,每个结点除了要存储数据外,还需要记录上(下)一个结点的地
阅读全文
摘要:概述 哈希表(Hash Table)也叫做散列表,根据关键码值(key value)可以快速存取访问的一种空间换时间的数据结构。它通过把关键码值通过映射函数计算到表中一个位置来访问记录,可以加快查找到速度。这个映射函数叫做散裂函数(Hash Function),存放记录的数组叫做哈希表(或散列表)。
阅读全文
摘要:什么是数据结构? 什么是算法? 从广义上讲,数据结构就是指一组数据的存储结构。算法就是操作数据的一组方法。 从狭义上讲,就是指某些著名的数据结构和算法,比如队列、栈、堆、二分查找、动态规划等。这些都是前人智慧的结晶,我们可以直接拿来用。 常用数据结构 1. 数组 2. 栈 3. 队列 4. 链表 5
阅读全文
摘要:LRU(Least Recently Used):最近最少使用页面置换算法,也就是首先淘汰最长时间未被使用的页面。关键是看页面最后一次被使用到发生调度的时间长短。 LFU(Least Frequently Used):最近最不常用页面置换算法,也就是淘汰一定时期内被访问次数最少的页。关键是看一定时间
阅读全文
摘要:树和图的深度优先,广度优先遍历所使用的也是回溯法,在动态规划中采用暴力递归解决01背包问题时候也归位回溯法。 回溯法核心思想: 回溯法的基本思想就是在问题的解空间(问题所有备选解所组成的集合)中不断的尝试,如果发现无法尝试就回退到上一步继续尝试直到找到问题的解为止。 迷宫问题:站在迷宫入口,要走出迷
阅读全文
摘要:一.冒泡排序(bubble sort) 冒泡排序算法的原理: 1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。 2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 3.针对所有的元素重复以上的步骤,除了最后一个。 4.持续每次对越来越少的
阅读全文
摘要:并查集也是一种特别的树形结构,可以辅助图相关的算法,并查集可以很高效的解决一类连接问题(Connectivity Problem)。
阅读全文
摘要:数组搜索是指从指定数组中去搜索某个特定元素的位置。主要有以下搜索方式: 1.线性搜索(从头搜到尾遍历):这种方法对于元素过多的数组,性能极低。 2.二分搜索(又称二分查找法、折半查找法):比较有效,但是前提是数组元素必须有序。二分查找复杂度为O(log n),不过这个前提必须是有序的数组。 二分查找
阅读全文
摘要:引言 数组结构是一种很常见的数据结构,并且在大部分编程语言中都存在,这些语言都提供了现成的可以立马就能使用的数组这种数据结构。为了更好的理解数组,这边文章就是来实现数组。 数组的特点 1.内存中数据之间紧密排列在一起。 2.新增元素需要开辟内存空间用以存放新的元素。 3.新增元素时候,如果新增的元素
阅读全文
摘要:简介 前缀表达式、中缀表达式、后缀表达式都是四则运算的表达方式,用以四则运算表达式求值,即数学表达式的求值。 前缀表达式 前缀表达式叫做波兰表达式。 前缀表达式的运算符位于操作数之前,它的符号并不是按照在表达式里所出现的顺序, 例如:(3 + 4)x 5 - 6 所对应的前缀表达式是 - x + 3
阅读全文
摘要:TOPK算法 TOPK问题是非常经典的处理海量数据的问题。TOPK问题就是给出一堆数,在里面找出最大、最常出现的等一系列问题。 通常情况下,数量级都是千万级别的,数据量特别大,而且内存使用是有限制的,所以肯定不能先排序,然后再遍历取出K个数。 堆排序做TopK算法有如下几个特点: 1、不会改变数据的
阅读全文
摘要:广度(BFS)和深度(DFS)优先算法这俩个算法是图论里面非常重要的两个遍历的方法。 下面一个例子迷宫计算,如下图 解释: 所谓广度,就是一层一层的,向下遍历,层层堵截,看下面这幅图,我们如果要是广度优先遍历的话,我们的结果是V1 V2 V3 V4 V5 V6 V7 V8。 广度优先搜索的思想: ①
阅读全文
摘要:负载均衡算法种类 1.轮询法(Round-Robin Scheduling)。 负载均衡系统接收到请求后,轮询调度按照顺序轮流分配给服务器。 这种方式非常简单,只管按顺序分配,至于服务器当前负载情况、硬件能力等都不关心,只要服务器还能工作,就可以分配,除非服务器挂了。 2.加权轮询(weight r
阅读全文
摘要:树状数组介绍 树状数组是一种可以用于查询任意两位之间的所有元素之和的一种树型数据结构的数据结构。比如对于一个数组有n个元素 arr = (arr[1]....a[n]),那么可以求出第i个到第j个元素的和,sum = arr[i]+...+arr[j]。
阅读全文
摘要:跳跃表(SkipList)是一种高效的搜索用途的数据结构,从链表结构演化而来,它是基于有序链表的扩展,思想类似于二分法查找,不断地缩小查找范围,减少遍历的次数。redis和levelDB底层都用了它。这个是维基百科上的解释https://en.wikipedia.org/wiki/Skip_list
阅读全文
摘要:我们在实际应用中,对一个问题会有不同的解题思路,比如我们在读书时候,往往对一道数学题目会有多种解题方法,可能有些方法比较简单,有些方法比较复杂,步骤较多。所以找到一个合适的方法可以更快更好的去解决问题。在程序应用中,我们也会有不同的算法去解决问题。 算法分类分为: 1.基础算法:包括字符串,数组,正
阅读全文
摘要:图的简介 图(Graph)结构是一种非线性的数据结构,图在实际生活中有很多例子,比如交通运输网,地铁网络,社交网络,计算机中的状态执行(自动机)等等都可以抽象成图结构。图结构比树结构复杂的非线性结构。 图结构构成 1.顶点(vertex):图中的数据元素,如图一。 2.边(edge):图中连接这些顶
阅读全文