什么是表驱动法?
表驱动法是一种编程模式 ———— 从表里查找信息而不使用逻辑判断语句。所有能够用逻辑判断语句来选择的事物,都可以使用查表来解决。表驱动法可以在复杂逻辑判断中使用。
使用表驱动法的两个问题
怎样从表中查询条目(如何设定表头也就是键)?
- 直接访问
- 索引访问
- 阶梯访问
应该在表里面存些什么(如何设定表的内容也就是值)?
直接访问表
直接访问表代替了更为复杂的逻辑控制结构。无需绕圈子就能直接在表里面找到想要的信息。
直接访问表主要的问题就是确定查询键值,有以下三种情况:
- 复制信息从而能够直接使用键值
- 转换键值以使其能够直接使用
- 把键值转换提取成独立子程序
索引访问表
索引访问表的使用情景主要是有时候,只用一个简单的数学运算还无法把数据转换成表键值,这类情况的一部分可以通过使用索引访问的方法。索引表不是直接访问,而是经过居间的索引去访问。
索引访问的优点
- 如果主查询表中的每一条记录都很大,那么创建一个浪费了很多空间的索引数组所用的空间,要比创建一个浪费了很多空间的主查询所有的空间要小得多
- 即使用了索引后没有节省内存空间,操作位于索引中的记录也要比操作位于主表中的记录更方便廉价
- 表查询技术在可维护性上具有的普遍优点,编写到表里面的数据比嵌入代码中的数据更容易维护
阶梯访问表
阶梯结构的基本想法是表中的记录对于不同的数据范围有效,而不是对不同的数据点有效。这种方法不像索引结构直接,但是要比索引访问节省空间。
使用阶梯技术时要注意的细节:
- 留心断点
- 确认循环能在找出最高一级的区间之后恰当的终止,同时确保正确地处理了两边的边界
- 考虑使用二分法查找取代顺序查找
- 阶梯访问大列表时顺序查找可能会比较耗时,可以采用二分的方法来提高效率
- 考虑用索引访问来取代阶梯技术
- 阶梯方法中的查找操作可能会比较耗时,如果执行速度更重要,可以考虑使用索引访问取代阶梯访问。