
博客
文章平均质量分 68
Pennyyu0214
这个作者很懒,什么都没留下…
展开
-
算法题(6)最长公共子序列
最长公共子序列问题描述: 给定两个不为空的字符串或数列,求出这两个字符串或序列最长的公共子序列。思路: 最长公共子序列和最长公共子串概念不同,子串要求必须为连续,而子序列则不要求连续性,只需保证公共子序列每一个字符的先后顺序在两个字符串或序列中一致即可。因此,我们在公共子串的基础上做一定修改,递推公式作如下改变:f(i,j)={0A[i]≠B[j]∩i=0 ∩ j=01A[i]=B[j]∩i=0 ∩ j=0f(i,j−1)A[i]≠B[j]∩i=0 原创 2021-02-05 17:16:32 · 321 阅读 · 0 评论 -
算法题(5)最长公共子串
最长公共子串问题描述: 给定两个不为空的字符串,求这两个字符串之间最长的公共子串。思路: 我们借助动态规划的思想,利用递推公式起始向后逐步计算两个字符串的部分最长公共子串,直至得出整体的最大子串。递推公式如下:f(i,j)={0A[i]≠B[j]∩(i=0 ∪ j=0)1A[i]=B[j]∩(i=0 ∪ j=0)f(i−1,j−1)+1A[i]=B[j]max(f(i,j−1),f(i−1,j)A[i]≠B[j]f(i,j)=\begin{cases} 0原创 2021-02-05 16:53:21 · 295 阅读 · 0 评论 -
Levenshtein编辑距离算法的改进---剪枝优化
Levenshtein编辑距离算法的改进—剪枝优化 我们在先前的一篇博客中已经阐明了Levenshtein编辑距离算法,首先介绍算法的思想,后来介绍了根据跳转列表生成所有编辑方案的方法,并通过附带的代码来解决这些问题。本文中我们继续探讨Levenshtein编辑距离算法,引入了剪枝思想来更高效的生成编辑距离状态表。 首先我们给出一张编辑距离表,如下所示:Edit-Dist<\b>kitten<\b>0123456s11原创 2021-01-17 16:47:12 · 2150 阅读 · 4 评论 -
算法题(4) 最大连续子数组和及子数组
最大连续子数组和问题描述: 给定一个不为空的数组,数组中一个元素或多个连续元素和称为连续子数组和,找出给定数组中连续子数组和的最大值。思路: 本题的思路有很多种,本文探讨三种最常用的解法,时间复杂度也各不相同。前两种通过暴力搜索的方式实现,时间复杂度为O(N3)O(N^3)O(N3)和O(N2)O(N^2)O(N2),效率较为低下;第三种方法采用的是“加入&抛弃”思想,仅需要遍历一次数组即可计算最大子数组和,时间复杂度为O(N)O(N)O(N)。下面我们逐一讲解。一、三重循环暴力搜索 三重原创 2021-01-17 12:31:30 · 449 阅读 · 0 评论 -
算法题(3) Levenshtein编辑距离和编辑方案
Levenshtein编辑距离 问题描述:在应用领域中,经常会遇到对两个字符串进行比较的问题,比如在自然语言处理中,需要比较两个句子的相似度,高级点的方法有神经网络、TF-IDF文本相似度等,最基础的方法就是编辑距离了,最初它是由俄罗斯科学家Vladimir Levenshtein在1965年提出来的。它的解释是给定一个原字符串和一个目标字符串,计算将原字符串修改为目标字符串时所编辑的最小次数。编辑可以是“增加”、“删除”和“修改”三种。 思路:本题需要动态规划思想,即对两个长字符串分别由小到大“部原创 2021-01-14 19:48:42 · 870 阅读 · 2 评论 -
算法题(2) 八皇后问题
八皇后问题 问题描述:八皇后问题是由国际西洋棋棋手马克斯·贝瑟尔于1848年提出的问题,其表述为:在8×8的标准国际象棋棋盘上摆放8个皇后,使任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 思想:不难想出,符合要求的摆法一定是每行有且仅有一个皇后棋子。因此从第一行开始,尝试在每一行的每个位置摆放皇后,每摆放一次便检查已经摆放的所有棋子是否符合要求,符合时继续摆放下一个棋子,否则调整当前棋子。 代码实现如下:# encoding=utf-8class empresses(原创 2021-01-14 15:32:32 · 191 阅读 · 2 评论 -
算法题(1) 二叉树遍历算法(递归与非递归)
栈结构下的二叉树遍历算法总结(代码后续完成)学习目标:本文章为大家梳理一下非递归的二叉树遍历算法设计流程,方便大家有一个直观的了解。一、引言二叉树的遍历想必大家都已经很熟悉了,二叉树主要分前序遍历、中序遍历、后续遍历和层次遍历四种迭代方式,相关的算法设计我们也能熟练掌握。在日常算法设计中,我们一般采用递归算法的思想来完成二叉树的四种遍历。本文带大家一起总结一下二叉树的非递归遍历算法流程,包含二叉树的前序、中序和后序遍历序列算法。二、递归算法回顾递归是算法设计中的一个重要思想,其包含两个基本部分:原创 2020-12-18 14:49:43 · 595 阅读 · 0 评论