modify some mistakes in thu_dsa/chp4/chp4.md
This commit is contained in:
@@ -97,13 +97,13 @@ bool paren(const char exp[]){
|
||||
|
||||
说的是有三个栈`A`, `B`, `S`,其中`B`和`S`为空,`A`中含有n个元素。可以写作$A = < a_1, a_2, ..., a_n]$,这里`<`表示栈顶,`]`表示栈底。
|
||||
|
||||
现在要通过一系列的出栈、入栈操作,把`A`中的所有元素通过`S`,转移到`B`中。将B写作$< a_{k1}, a_{k_2}, ..., a_{k_n}$。把这样的一个序列就称作对原输入序列的一个栈混洗。
|
||||
现在要通过一系列的出栈、入栈操作,把`A`中的所有元素通过`S`,转移到`B`中。将B写作$< a_{k_1}, a_{k_2}, ..., a_{k_n}]$。把这样的一个序列就称作对原输入序列的一个栈混洗。
|
||||
|
||||
> 合法栈混洗的数量。
|
||||
|
||||
根据上面的描述可以看出,栈混洗只需要满足唯一一个条件:出栈时栈不得为空。只要满足该条件的一个序列都是一个合法的栈混洗。这个和上面描述的括号匹配问题是不是感觉有一点相似啊?其实它们之间本质就是一样的,一个入栈操作可以看做是一个左括号,一个出栈操作可以看做是一个右括号,合法的栈混洗要求入栈操作大于出栈操作,匹配的括号表达式要求左括号数量大于右括号。
|
||||
根据上面的描述可以看出,栈混洗只需要满足唯一一个条件:出栈时栈不得为空。只要满足该条件的一个序列都是一个合法的栈混洗。这个和上面描述的括号匹配问题是不是感觉有一点相似啊?其实它们之间本质就是一样的,一个入栈操作可以看做是一个左括号,一个出栈操作可以看做是一个右括号,合法的栈混洗要求入栈操作总是大于等于出栈操作,匹配的括号表达式要求左括号数量总是大于等于右括号。
|
||||
|
||||
可以通过递推表达式或者排列组合的方法来得到栈混洗的数量。关于这个可以参考[栈混洗的数量](https://www.cnblogs.com/jiayouwyhit/p/3222973.html)。从结论上来说,所有的操作数量有$C_{2n}^{n}$个,其中合法的操作数有$C_{2n}^{n-1}$个。
|
||||
可以通过递推表达式或者排列组合的方法来得到栈混洗的数量。关于这个可以参考[栈混洗的数量](https://www.cnblogs.com/jiayouwyhit/p/3222973.html)。从结论上来说,所有的操作数量有$C_{2n}^{n}$个,其中合法的操作数有$C_{2n} - C_{2n}^{n-1}$个。
|
||||
|
||||
> 合法栈混洗的快速判断。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user