最长公共子序列(Longest Common Subsequence,LCS)
flyfish 2015-8-20
假定我们有如下两个序列
S1: 1 2 3 4 5 6
S2: 4 5 6 7 8 9
S1和S2有一个最长公共子序列为 4 5 6
一个子序列不一定必须是连续的,即中间可以被其他字符分开,但它们的顺序必须正确的。
最长公共子序列不一定只有一个。
S1: h e l l o
S2: l e o n
S1和S2有一个最长公共子序列为 eo
《算法导论》的描述
子序列(subsequence)
A subsequence of a given sequence is just the given sequence with zero or
more elements left out.
一个给定序列的子序列就是该给定序列中去掉零个或者多个元素。
left out 忽视,不考虑;被遗忘
leave out的过去时或者被动语态 被遗忘,删掉等
公共子序列(common subsequence)
Given two sequences X and Y, we say that a sequence Z is a common subsequence of X and Y if Z is a subsequence of both X and Y
给定两个序列X和Y,如果Z既是X的一个子序列又是Y的一个子序列,则序列Z是X和Y的一个公共子序列。
最长公共子序列
X和Y的所有公共子序列中长度最长的公共子序列就是最长公共子序列。
Each subsequence of X corresponds to a subset of the indices {1,2,…,n} of X.
X has 2n subsequences。
X的每个子序列对应于X的下标集合{1,2,…,n}的一个子集。X共有2n个子序列。
为什么是2n?
排列组合解释
Combination [k?mb?’ne??(?)n] 美 [,kɑmb?’ne??n]
组合数
Arrangement 英 [?’re?n(d)?m(?)nt] 美 [?’rend?m?nt]
排列数
排列
从n个不同元素中,任取m(m≤n,m与n均为自然数,下同)个元素按照一定的顺序排成一列,叫做从n个不同元素中取出m个元素的一个排列;从n个不同元素中取出m(m≤n)个元素的所有排列的个数,叫做从n个不同元素中取出m个元素的排列数,用符号 A(n,m)表示。
Amn=n(n?1)(n?2)...(n?m+1)
Amn=n!(n?m)!
组合
从n个不同元素中,任取m(m≤n)个元素并成一组,叫做从n个不同元素中取出m个元素的一个组合;从n个不同元素中取出m(m≤n)个元素的所有组合的个数,叫做从n个不同元素中取出m个元素的组合数。用符号 C(n,m) 表示。
Cmn=(n?1)(n?2)...(n?m+1)m!
Cmn=n!m!(n?m)!
Cmn=Cn?mn
(a+b)0=1
(a+b)1=a+b
(a+b)2=a2+2ab+b2
(a+b)3=a3+3a2b+3ab2+b3
…
(a+b)1=C01a+C11b
(a+b)2=C02a2+C12ab+C22b2
(a+b)3=C03a3+C13a2b+C23ab2+C33b3
(a+b)n当n为正整数时的展开式就是二项式定理(Binomial Theorem)
binomial 英 [ba?’n??m??l] 美 [ba?’nom??l]
adj. 二项式的;二种名称的
n. [数] 二项式;二种名称
theorem 英 [‘θ??r?m] 美 [‘θi?r?m]
n. [数] 定理;原理
二项式各项系数
1
1 1
1 2 1
1 3 3 1
…
形成了杨辉三角
Crn+Cr+1n=Cr+1n+1
a=1,b=1
C0n+C1n+C2n+…Cnn=2n
版权声明:本文为博主原创文章,未经博主允许不得转载。