当前课程知识点:数据结构(上) > 第四章 栈与队列 > (c2)栈应用:括号匹配 > 04C2-2 尝试
为了得到这个问题的有效解法
我们或许应该继续沿用
不断将问题简化的总体策略
为此 我们需要首先来考察
最基本的平凡情况
也就是 如果一个表达式
根本就不含任何的括号
从而实质上等价于一个空串
那么它自然是匹配的
接下来 我们注意到这样一个事实
如果某一个表达式E
已经是括号匹配的
那么我们在它的左侧和右侧
添加一对匹配的括号
那么整体依然将是匹配的
此外我们也会注意到
如果两个表达式E和F
已经是各自匹配的
那么我们只要将它们串接起来
就可以得到一个更大的匹配表达式
然而很遗憾
这两个性质都不能
使得我们很好地运用此前所介绍的
减而治之或者分而治之的策略
请注意
我们这里两条性质的条件都是仅当
也就是only if
从逻辑推理的方向来看
它是由左侧的前命题
推向右侧的后命题
与我们简化问题的方向背道而驰
它们只能作为
括号匹配判断的必要条件
而不是充分条件
事实上 它们各自都存在对应的反例
我们来看第一个反例
表达式E是中间这一段
显然它是不匹配的
因为我们看到
它是以一个左括号结尾
但是如果我们在它的末端和前方
分别配上一个右括号和左括号
居然可以得到一个完全匹配的表达式
这意味着我们不能
如此来做减而治之
类似地 再来考虑下面这个反例
如果左侧这个子表达式是E
右侧这是F的话
不难验证 它们都是不匹配的
因为至少它们各自所含的括号
都不是偶数个
然而我们注意到
如果将它们串接起来
我们居然同样可以得到
一个跟刚才一样的
完全匹配的表达式
这就意味着
我们如果试图在某个地方
来做分而治之的话
也是不容易行得通的
综上所述
为了真正使这个问题
能够得到有效的简化
我们必须发现
并且借助这个问题背后
所蕴含的某种充分性
-选课之前
--写在选课之前
--宣传片
-考核方式
--考核方式
-OJ系统说明
--关于OJ
--1-注册与登录
--2-界面与选课
--3-提交测试
-关于课程教材与讲义
--课程教材与讲义
-关于讨论区
--关于讨论区
-微信平台
--html
-PA晋级申请
--PA晋级
-(a)计算
--演示
--(a)计算--作业
-(b)计算模型
-(b)计算模型--作业
-(c)大O记号
-(c)大O记号--作业
-(d)算法分析
-(d)算法分析--作业
-(e)迭代与递归
-(e)迭代与递归--作业
-(xc)动态规划
-- 演示
-(xc)动态规划--作业
-本章测验--作业
-(a)接口与实现
--02A-5 复制
-(a)接口与实现--作业
-(b)可扩充向量
-(b)可扩充向量--作业
-(c)无序向量
--02C-1 概述
--02C-3 插入
--02C-6 查找
--02C-8 遍历
-(c)无序向量--作业
-(d1)有序向量:唯一化
-(d1)有序向量:唯一化--作业
-(d2)有序向量:二分查找
-(d2)有序向量:二分查找--作业
-(d3)有序向量:Fibonacci查找
-(d3)有序向量:Fibonacci查找--作业
-(d4)有序向量:二分查找(改进)
-(d4)有序向量:二分查找(改进)--作业
-(d5)有序向量:插值查找
-第二章 向量(下)--(d5)有序向量:插值查找
-(e)起泡排序
--02E-2 改进
--02E-3 反例
-(e)起泡排序--作业
-(f)归并排序
-(f)归并排序--作业
-本章测验--作业
-(a)接口与实现
--03A-4 实现
-(a)接口与实现--作业
-(b)无序列表
--03B-2 查找
-(b)无序列表--作业
-(c)有序列表
--03C-3 查找
-(c)有序列表--作业
-(d)选择排序
--03D-1 构思
--03D-2 实例
--03D-3 实现
--03D-4 推敲
--03D-6 性能
-(d)选择排序--作业
-(e)插入排序
--03E-1 经验
--03E-2 构思
--03E-3 对比
--03E-4 实例
--03E-5 实现
-(e)插入排序--作业
-(xd)习题辅导:LightHouse
-本章测验--作业
- (a)栈接口与实现
--04A-1 栈
--04A-2 实例
--04A-3 实现
- (a)栈接口与实现--作业
-(c1)栈应用:进制转换
-第四章 栈与队列--(c1)栈应用:进制转换
-(c2)栈应用:括号匹配
-(c2)栈应用:括号匹配--作业
-(c3)栈应用:栈混洗
-第四章 栈与队列--(c3)栈应用:栈混洗
-(c4)栈应用:中缀表达式求值
-(c4)栈应用:中缀表达式求值--作业
-(c5)栈应用:逆波兰表达式
-第四章 栈与队列--(c5)栈应用:逆波兰表达式
-(d)队列接口与实现
--04D-1 接口
--04D-2 实例
--04D-3 实现
-第四章 栈与队列--本章测验
-(a)树
--05A-1 动机
--05A-2 应用
-(a)树--作业
-(b)树的表示
--05B-2 父亲
--05B-3 孩子
-第五章 二叉树--(b)树的表示
-(c)二叉树
-(c)二叉树--作业
-(d)二叉树实现
-(d)二叉树实现--作业
-(e1)先序遍历
-(e1)先序遍历--作业
-(e2)中序遍历
-第五章 二叉树--(e2)中序遍历
-(e4)层次遍历
-第五章 二叉树--(e4)层次遍历
-(e5)重构
-(e5)重构--作业
-本章测验--作业
-(a)概述
-(a)概述--作业
-(b1)邻接矩阵
-(b1)邻接矩阵--作业
-(c)广度优先搜索
--06C-2 策略
--06C-3 实现
--06C-5 实例
-(c)广度优先搜索--作业
-(d)深度优先搜索
--06D-1 算法
--06D-2 框架
--06D-3 细节
-(d)深度优先搜索--作业
-第六章 图--本章测验