
数据结构与算法
文章平均质量分 64
清泓y
UE开发工程师
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
N皇后问题(C++)
n−皇后问题是指将 n 个皇后放在 n×n 的国际象棋棋盘上,使得皇后不能相互攻击到,即任意两个皇后都不能处于同一行、同一列或同一斜线上。现在给定整数 n,请你输出所有的满足条件的棋子摆法。输入格式共一行,包含整数 n。输出格式每个解决方案占 n 行,每行输出一个长度为 n 的字符串,用来表示完整的棋盘状态。其中 . 表示某一个位置的方格状态为空,Q 表示某一个位置的方格上摆着皇后。每个方案输出完成后,输出一个空行。注意:行末不能有多余空格。输出方案的顺序任意,只要不重复且没有遗漏即可。原创 2022-04-20 21:18:55 · 5276 阅读 · 0 评论 -
浅谈前缀和(C++)
1.构造前缀和前缀和的思路是这样的,对于一个给定的数组 nums,我们额外开辟一个前缀和数组进行预处理:vectorsums;int n = nums.size();// 前缀和数组sums.resize(n+1);for (int i = 0; i < n; i++)sums[i + 1] = sums[i] + nums[i];这个前缀和数组 preSum 的含义也很好理解,sums[i] 就是 nums[0…i-1] 的和。那么如果我们想求 nums[i…j] 的和,只需要一步操原创 2022-03-23 09:41:10 · 1662 阅读 · 0 评论 -
深入理解分治算法(附上详例及代码)
分治算法分治算法,根据字面意思解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。分治策略:对于一个规模为n的 问题,若该问题可以容易解决(比如说规模n较小)则直接解决,否则将其分解为k个规模较小的子问题,这些子问题互相独立且与原问题形式相同,递归的解决这些子问题,然后将各子问题的解合并得到原问题的解。使用场景:·该问题的规模缩小到一定的程度就可以容易的解决。·该问题可以分解为若干原创 2021-11-18 11:20:31 · 1755 阅读 · 0 评论 -
深入理解Sunday算法(附上C++代码)
2.Sunday算法Sunday算法与KMP算法一样是从前往后匹配,在匹配失败时关注的是主串中参加匹配的最末位的下一位字符。如果该字符没有在模式串中出现则直接跳过,即移动位数=模式串长度+1;否则,其移动位数=模式串长度-该字符最右出现的位置(从0开始)=模式串中该字符最右出现的位置到尾部的距离+1例:假定现在要在主串substring searching xiaowu中查找search。1.刚开始时,把模式串与文本串左边对齐:2.结果发现在第2个字符处发现不匹配,不匹配时关注文本串中参加匹配原创 2021-11-16 18:06:07 · 2042 阅读 · 1 评论 -
深入理解BM算法(附上C++代码)
BM算法BM算法的一个特点是当不匹配的时候一次性可以跳过不止一个字符。即它不需要被搜索的字符串中的字符进行逐一比较,而会跳过其中的某些部分。通常搜索的关键字越长,算法速度越快。它的效率来源:对每一次失败的匹配尝试,算法都能够使用这些信息来排除尽可能多的无法匹配位置。它充分的利用待搜索字符串的一些特征,加快了搜索的步骤。基于以下两个规则让模式每次向右移动的尽可能大的距离:坏字符规则:当文本字符串中的某个字符跟模式串的某个字符不匹配时,我们称文本串中的这个失配字符为坏字符,此时模式串需要向右移动,移动的位原创 2021-11-15 21:11:29 · 3012 阅读 · 1 评论