我需要创建一个基于链表、数组和常量内存使用的数据结构。
作为输入,我得到两个数字:n和M。
N表示键上磁盘的最大容量,M表示计算机硬盘的最大容量,因此M>N.
因此,我需要创建一个程序,将信息从硬盘“移动”到键上的磁盘,该程序需要实现以下方法:
(*)用户可以更改文件的重要性。
最大内存使用量为O(M)
我到目前为止所做的:
我已经创建了一个数组1.m,它将“保存”计算机数据,我创建了一个双链接列表,它将保存磁盘上的关键数据。其思想是:每次将数据添加到按键磁盘上时,它将被添加到链接列表中,而我可以使用数组作为索引(/key)存储直接访问数据。
我的计算机数据字段:
node firstNode;
node currentNode;
node[] dataCollection; // Will hold computer hard-drive data因此,我想要创建一个方法,用我想要添加的数据替换最不重要的数据,这样我就可以在Insert中使用我的替换代码:
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)的运行时间,特别是当用户决定更改文件重要性时。
有什么想法吗?
发布于 2013-04-06 18:18:21
我对解决你的问题的建议如下:
使用SkipList实现可以确保条目按其重要性排序。
根据Java -这个类(ConcurrentSkipListMap)实现了SkipLists的并发变体,为containsKey、get、put和remove操作及其变体提供了预期的平均日志(N)时间开销。
通常,该实现允许以与平衡的二进制搜索树(即使用与log n成比例的探针数目而不是n)相媲美的效率进行项查找。
最后,查看[这里],了解关于SkipList的更多信息,以及如何编写自己的实现。
https://stackoverflow.com/questions/15853938
复制相似问题