TAOCP中1.1习题1解答与思考
来源:互联网 发布:c语言统计单词个数 编辑:程序博客网 时间:2024/06/04 23:28
先大致叙述一下题目:
使用书中给出的标记方法完成数值的序列的替换,比如交换m和n的数值可以通过这样的顺序实现:t ß m,m ß n,m ß t。现在要求用最少的步骤实现一下序列的调换,将(a,b,c,d)调换为(b,c,d,a)。
除了这些要求之外,也没有什么额外的要求。观察上面的序列,其实最简单的一个理解模型是实现一次循环左移的操作。如果是这样,那么比较好的实现方案应该如下:
S1: t ß a
S2: a ß b
S3: b ß c
S4: c ß d
S5: d ß t
这样,一次循环左移的功能也就完成了。
但是,这个题目的前提是给出了这个序列移动前后的状态,并没有给出实质的功能性含义描述。也就是说,并没有说这是一个循环左移的算法。那如果需要一个通用的算法来实现循环的重新排列应该怎么做呢?我觉得最好的方式还是要充分使用存储,尽量多地去设置中间的Buffer。如此,通用的算法描述应该如下:
S1: t1 ß a
S2: t2 ß b
S3: t3 ß c
S4: t4 ß d
S5: a ß t2
S6: b ß t3
S7: c ß t4
S8: d ß t1
任意乱序的排列调整自然是使用上面的通用处理好一些,当然这种通用也只是针对一种方式下的固定解答。真若是覆盖全部的方式,那需要完成的工作还是很多的。而就题目来说,最快的解决方案自然还是通过一个数据的缓存来模拟一次循环左移的操作。
- TAOCP中1.1习题1解答与思考
- TAOCP-1.1
- SICP习题解答1.1-1.8
- 数据结构与算法经典习题解答
- 《算法设计与分析》习题解答笔记
- 习题解答
- 习题解答
- TAOCP
- taocp
- TAOCP中最大公约数算法理解
- JAVA作业和课后习题解答1
- 算法导论习题15.5-1解答
- Accelerated C++ 习题解答 第1章
- 《学习OpenCV》课后习题解答1
- c++编程习题与解答笔记(chapter 1)(全美经典学习指导系列)
- TAOCP Vol1 1.1 何谓算法?
- TAOCP V4.F2 格雷码(1)
- 读书笔记《TAOCP》 V1 S1.1
- java多线程之快速入门
- 【NOIP模拟考三】水资源 day2 first 序列计数
- 天气预报信息
- Unity游戏开发 怪物巡逻AI
- Python for 循环
- TAOCP中1.1习题1解答与思考
- Java并发编程概览
- git 常用命令
- js笔记:js中的call()和apply()用法与区别
- Java集合-HashMap源码实现深入解析
- Java读取Properties文件的七种方法
- Python if 语句
- [js高手之路] vue系列教程
- Python:如何取矩阵的部分列,保存为一个新的矩阵