Week 5
Red–black BST with No Extra Memory
问题
Describe how to save the memory for storing the color information when implementing a red–black BST.
分析
本来自信满满地认为“比特”可以解决一切,然后猛然反应过来布尔值就是比特……
然后这个题宛如脑筋急转弯一般,怎么说呢,我真的不喜欢这样的逻辑
设计【非原创】
修改红黑树的结构,如果对应的节点是红连接子节点,就把它的子节点的左小右大改成左大右小,这个时候就需要注意一下修改之后的旋转操作也需要做修改(因为不再是默认左小右大了)
Document Search
问题
Design an algorithm that takes a sequence of n n n document words and a sequence of m m m query words and find the shortest interval in which the m m m query words appear in the document in the order given. The length of an interval is the number of words in that interval.
分析
翻译了半天,就是说给定一个词序列(同一个词可能出现多次),再给定一个查询序列,按照查询序列顺序,这些词出现的最小区间是多大。
首先整体思路是贪心,按顺序找到当前此出现的在上一个词出现后的最小位置即可,整体构成的就是有序最小位置。但问题在第一个词,其最小位置不一定代表的整体最小位置,因此需要对其遍历
设计
对文档中出现的每一个词,维护一个有序表(数组其实就可以,但是没有数列可变大小方便)来存储其在序列中出现的位置(输入一个记录一个,那么输入的就是有序的,按顺序存下来就行了,连排序都省了)
对第一个查询的词的出现位置枚举,然后尝试找到后续查询词的合法最小位置,最后一个查询的合法最小位置和当前考察的第一个查询词的位置的差即一个“最小区间”
我们试图找到这个最小区间,需要遍历整个第一个查询词出现的位置
有一种可能,就是一个词没有出现在上一个词之后的合法位置,这个时候这个考察就不再进行了
Generalized Queue
问题
Design a generalized queue data type that supports all of the following operations in logarithmic time (or better) in the worst case.
- Create an empty data structure.
- Append an item to the end of the queue.
- Remove an item from the front of the queue.
- Return the i t h i^{th} ith item in the queue.
- Remove the i t h i^{th} ith item from the queue.
分析
一看“最坏对数时间”,红黑树没有悬念啊……
至于如何用红黑树维护“插入顺序”,也很好办,插入顺序就是相对顺序,那么我们找队首和队尾就相当于找最大和最小,第i项就是第i小,按照课程讲授,红黑树的删除也是现在对数时间复杂度的
设计
红黑树,键为插入顺序编号,值为插入项目,队首为键最小值,队尾为键最大值