我需要创建一个基于链表、数组和常量内存使用的数据结构。
作为输入,我得到两个数字:N 和 M。
N代表密钥盘的最大容量,M代表计算机硬盘的最大容量,所以M>N。
所以我需要创建一个程序,将信息从硬盘驱动器“移动”到密钥磁盘,该程序需要实现以下方法:
- 插入(数据) - 将数据插入密钥磁盘,如果它已满,则删除最不重要的数据(*):最坏情况运行时 O(1)。
- delete(data) - 从磁盘上删除给定的数据 - O(1)
(*) 用户可以更改文件的重要性。
最大内存使用量为 O(M)
到目前为止我做了什么:
我创建了一个数组 [1...M] 来“保存”计算机数据,我创建了一个双向链表来保存磁盘键数据。[想法是:每次将数据添加到disk-on-key时,它都会添加到链表中,我可以使用数组作为索引(/key)存储直接访问数据。]
我的电脑数据字段:
node firstNode;
node currentNode;
node[] dataCollection; // Will hold computer hard-drive data
所以我想创建一个方法,用我想添加的数据替换最不重要的数据[这样我就可以在插入中使用],我的替换代码:
public void replace(int leastImportantdata, int insertData){
node leastImportant = dataCollection[leastImportantdata];
if (leastImportant.prev!=null) leastImportant.prev.next=dataCollection[insertData-1];
if (leastImportant.next!=null) leastImportant.next.prev=dataCollection[insertData-1];
numOfReplacements++;
所以,我的主要问题是在给定这两个“组合”数据结构的情况下找到最不重要的数据,并且仍然保持 O(1) 的运行时间,尤其是当用户决定更改文件重要性时。
- 假设我们从 {4,3,2,1} 开始(数字代表重要性),最不重要的数据是 1。突然,用户决定将最后一个文件的重要性更改为 5,我们得到 {4,3,2, 5},最不重要的数据是 2。
任何想法?