A Biased Random Key Genetic Algorithm for Solving the Longest Common Square Subsequence Problem
论文引言中提到的几种算法
Hunt-Szymanski算法
最坏时间复杂度 O ( n 2 l o g n ) O(n^2logn) O(n2logn)
问题-LCSqS
最长公共平方子序列(the longest common square subsequence)是最长公共子序列的问题变种,在寻找两个字符串的最长公共子序列(其中字符可以不连续)的同时,要求满足是平方字符串。
平方字符串的定义: s s s= s 0 s_0 s0+ s 0 s_0 s0= [ s 0 ] 2 [s_0]^2 [s0]2
在两个字符序列中,寻找一个公共子序列,并且该公共子序列还可以通过一个分割点分割成两个相同的子序列。
首先明确一点,对于原字符序列中寻找的公共子序列,可以是不连续的,即对原字符序列擦除任意数量的字符可以得到的顺序序列。
对于组合优化问题中,平方子串属于约束,平方子串的长度是目标
论文算法思路
对于输入的字符串,会智能的选择一个合适的分割点,然后将一个字符串分为两份,以输入两个字符串为例:
- 长字符串会被分成两个字串,两个字符串s_left和s_right
- s1=s1_left+s1_right;s2=s2_left+s2_right(通过算法可以找到一个合适的分割点:把最长公共串分割到两边)
- 切割后的子串两两对比,寻找子串中的最长公共子串,会得到四个解集{s1_left&s2_left,s1_left&s2_right,s1_right&s2_left,s1_right&s2_right}(因为算法的分割可以保证两个子串中的最长公共串一样)
- 对比解集中的所有最长公共子串,找到公共子串,即为解
存在两个关键的算法:
- BRKGA找到最优的切割点
- 波束搜索解决产生的LCS问题
主要算法
Beam Search
一种候选前K个最优解的搜索算法(逻辑树形结构)
在第一步选择样本时,选择前K个高概率的搜索样本,然后每个样本继续下一步选择(选择一个),即在第一步选择K个,后续的选择还是1个最高概率样本。
假设,集合中有N个,设置为K,输出序列长/时间步为T。则时间复杂度为 O ( K N T ) O(KNT) O(KNT)
BRKGA(Bais Random Keys Genetic Algorithm)
偏置随机关键遗传算法
策略参数
- p m p_m pm