自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

IOSSHAN的博客

坚持原创

  • 博客(15)
  • 收藏
  • 关注

原创 数据结构与算法---布隆过滤器、跳表

布隆过滤器需求如果需要编写一个网络爬虫,去爬10亿个网站数据,为了避免爬到重复的网站,如何判断某个网站是否爬过?首先,10亿个网站数据量很大,使用哈希表有些不合适。哈希表确实可以做到O(1)级别找到对应的元素,但10亿级别的数据量,空间复杂度太大,就不合适了。因此,我们需要尝试使用新思路、新方法:布隆过滤器。set之所以可以做到O(1)级别的查找某个元素是否存在,是因为其底部使用的是Hash表,而hash表底层是使用的数组。hashMap之所以可以做到O(1)级别的查找某个元素的对应元素,是因

2020-10-31 23:38:48 245

原创 数据结构与算法---动态规划---0-1背包问题

0-1背包问题,我们在数据结构与算法—贪心中谈论过。当时是使用重量优先、价值优先、性价比优先三种贪心策略,使用贪心策略解决的问题。但,这种解决问题的答案并不是最优解。现在我们使用DP来解决0-1背包问题。思路是否为最值问题?求背包最多装载量,是最值问题能否使用DP?原问题能否分解为子问题?可以无后效性满足使用DP步骤?假设values是价值数组,weights是重量数组编号为k的物品,价值是values[k],重量是weights[k],k∈[0, n)确定含义假设

2020-10-30 11:49:26 302

原创 数据结构与算法---动态规划---最长公共子串

最长公共子串最长公共子串,Longest Common Substring子串是连续的子序列求两个字符串的最长公共子串长度ABCBA 和 BABCA的最长公共子串是 ABC,长度为3思路是否为最值问题?是能否使用DP解决?原问题分解为子问题可以无后效性无使用DP步骤确定含义假设dp(i, j) 是 str1[i - 1]、str2[j - 1]的最长公共子串i ∈ [1, str1.length];j ∈ [1, str2.length];最长公共子串,必

2020-10-29 14:13:51 1042

原创 数据结构与算法---动态规划---最长公共子序列

最长公共子序列(LCS)最长公共子序列,Longest Common Subsequence,LCS问:求两个序列的最长公共子序列长度?[1, 3, 5, 9, 10]和[1, 4, 9, 10]的最长公共子序列是[1, 9, 10],长度为31143. 最长公共子序列是否为最值问题?是能否使用DP?原问题分解为子问题无后效性是使用DP步骤确定含义假设两个数组分别是:nums1、nums2i∈[1, nums1.length];j∈[1, nums2.lengt

2020-10-28 17:01:22 342

原创 数据结构与算法---动态规划---最大连续子序列和、最长上升子序列

最大连续子序列和问:给定一个长度为n的整数序列,求它的最大连续子序列和比如:-2, 1, -3, 4, -1, 2, 1, -5, 4的最大连续子序列和是4 + (-1) + 2 + 1 = 6是否为最值问题?首先,这是一个求最值的问题,可以考虑使用DP能否使用DP?原问题可以拆解为子问题可以求-2结尾的最大连续子序列求1结尾的最大连续子序列…求4结尾的最大连续子序列无后效性以-5结尾的最大连续子序列只需要找出它前面的1,以1结尾的最大连续子序列的和dp(6),如果这个和

2020-10-27 16:47:57 803

原创 数据结构与算法---动态规划---概念、找零钱

动态规划(Dynamic Programming)动态规划简称DP;DP是求最优化问题的一种常用策略通常的使用套路:(一步一步优化)暴力递归(自顶向下,出现了重叠子问题,因此需要优化为2)记忆化搜索(自顶向下,还可以优化为3)递推(或者称为迭代、非递归)(自低向上)上面的步骤是三种方法,每种方法都是对之前方法的优化第一种方法,是最容易想到,也是时间复杂度比较高的一种第二种方法,是对第一种方法的优化第三种方法,就是使用动态规划来解决问题其实可以理解为,我们学习动态规划,就是学习第三

2020-10-23 16:13:03 745

原创 数据结构与算法---分治---最大连续子序列和 | 剑指 Offer 42.连续子数组的最大和

分治(Divide And Conquer)分治,分而治之。先分后治分治的一般步骤为:将原问题分解成若干个规模比较小的子问题(子问题和原问题的结构一样,只是规模不一样)子问题又不断分解成规模更小的子问题,直到不能再分解(直到可以轻易计算出子问题的解)利用子问题的解推导出原问题的解因此,分治策略非常适合用递归需要注意的是:子问题之间是相互独立的分治的应用:快速排序、归并排序、大数乘法主定理分治策略通常遵守一种通用模式:解决规模为n的问题,分解成a个规模为n/b的子问题,然后在O(n

2020-10-22 22:20:32 1848 1

原创 数据结构与算法---贪心

贪心(Greedy)贪心策略,也称为贪婪策略每一步都采取当前状态下的最优选择(局部最优),从而希望推导出全局最优解贪心的应用:哈夫曼树最小生成树最优装载问题(加勒比海盗)题:有一批古董,每一件都价值连城,一旦打碎就失去了价值。海盗船的载重量为W,每件古董的重量为wi,海盗们如何选古董才能尽可能多的达到最大价值?比如:W为30,wi分别为:3、5、4、10、7、14、2、11贪心策略:每一次都优先选择重量最小的古董可以每次拿一个,然后计算目前拿到的古董总重量,与船的载重量相比;也可以,

2020-10-22 11:50:25 214

原创 数据结构与算法---回溯、剪枝

通过这节课,我们将学到:八皇后摆放问题、走迷宫的解法回溯(Back Tracking)这个英文单词可以的,”回去追踪”,回溯回溯可以理解为:通过选择不同的岔口来通往目的地每一步选择一条路出发,能进则进,不能进则退回上一步(回溯),换一条路再试树、图的深度优先搜索就是典型的回溯应用可以看出,回溯适合使用递归来解决。知识的串联性,递归->回溯八皇后问题(Eight Queens)在一个8x8的国际象棋上,摆放八个皇后,使其不能相互攻击:如果任意两个皇后处于同一行、同一列、同

2020-10-20 23:49:14 525

原创 数据结构与算法---递归

递归(Recursion)递归:函数(方法)直接或者间接调用自身。递归是一种常用的编程技巧栈内存,属于内存,是存储数据的。栈内存可以存储函数,按序加载push,然后最后加入的最先退出pop,这就是个栈的数据结构。这也就是称为栈空间(栈内存)的原因。如果递归调用没有终止,将会一直消耗栈空间最终导致栈内存溢出(Stack Overflow)Stack Overflow,这不就是那个有名的网站么所以,必须要有一个明确的结束递归的条件,也叫做边界条件、递归基递归的基本思想拆解问题把规模大的

2020-10-15 14:35:11 305

原创 数据结构与算法---图

本章只记录一些基本概念图(Graph)图由 顶点(vertex) 和 边(edge) 组成,通常表示为G = (V, E)G表示一个图,V是顶点集,E是边集顶点集V有穷且非空任意两个顶点之间都可以用边来表示它们之间的关系,边集E可以是空的一下三个,都是图有向图(Directed Graph)有向图的边是有明确方向的有向无环图(Directed Acyclic Graph,简称DAG)如果一个有向图,从任意顶点出发无法经过若干条边回到该顶点,那么它就是一个有向无环图出度、入度出度

2020-10-13 18:30:23 179

原创 数据结构与算法---并查集

并查集(Union Find)

2020-10-12 17:14:22 254

原创 数据结构与算法---排序---计数排序、基数排序、桶排序

之前学的7种排序:冒泡、选择、插入、希尔、快速、归并、堆排序都是基于比较的排序最低的平均时间复杂度为O(nlogn)而接下来要学习的计数排序、基数排序、桶排序,都不是基于比较的排序它们是典型的用空间换时间,在某些时候,平均时间复杂度要低于O(nlogn)计数排序(Counting Sort)计数排序是对整数的排序计数排序是对一定范围内的整数进行排序计数排序的核心思想统计每个整数在序列中出现的次数,进而推导出每个整数在有序序列中的索引...

2020-10-10 14:54:31 173

原创 数据结构与算法---排序---希尔排序

希尔排序(Shell Sort)1959年由唐纳德~希尔提出的希尔排序把序列看做是一个矩阵,分成m列,逐列进行排序m从某个整数逐渐减为1当m为1时,整个序列将安全有序因此,希尔排序也被称为递减增量排序矩阵的列数取决于步长序列(step sequence)比如,如果步长序列为{1, 5, 19, 41, 109, …},就代表依次分成109列、41列、19列、5列、1列进行排序不同的步长序列,执行效率也不同希尔本人给出的步长序列是n/2^k,其中k = 1, 2, 3, 4比如n=16的时

2020-10-09 17:41:47 258

原创 数据结构与算法---排序---快速排序

快速排序(Quick Sort)快速排序是常用且被问概率比较大的排序算法,属于重中之重的算法,必须掌握。执行流程1 从序列中选择一个轴点元素(pivot)假设每次选择0位置的元素为轴点元素2 利用pivot将序列分割成2个子序列将小于pivot的元素放在pivot前面(左侧)将大于pivot的元素放在pivot后面(右侧)等于pivot的元素放在哪边都可以3 对子序列进行1、2操作直到不能再分割(子序列中只剩下1个元素)快速排序的本质是:逐渐将每一个元素都转换成轴点元素如何找到轴

2020-10-09 14:45:56 236

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除