首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >查找运行时为O(1) - java的最低数

查找运行时为O(1) - java的最低数
EN

Stack Overflow用户
提问于 2013-04-06 17:30:28
回答 1查看 372关注 0票数 4

我需要创建一个基于链表、数组和常量内存使用的数据结构。

作为输入,我得到两个数字:n和M。

N表示键上磁盘的最大容量,M表示计算机硬盘的最大容量,因此M>N.

因此,我需要创建一个程序,将信息从硬盘“移动”到键上的磁盘,该程序需要实现以下方法:

  1. 插入(数据)-将数据插入到键上的磁盘中,如果数据已满,则删除最不重要的数据(*):最坏的情况是运行时O(1)。
  2. 删除(数据)-从密钥上的磁盘删除给定的数据- O(1)

(*)用户可以更改文件的重要性。

最大内存使用量为O(M)

我到目前为止所做的:

我已经创建了一个数组1.m,它将“保存”计算机数据,我创建了一个双链接列表,它将保存磁盘上的关键数据。其思想是:每次将数据添加到按键磁盘上时,它将被添加到链接列表中,而我可以使用数组作为索引(/key)存储直接访问数据。

我的计算机数据字段:

代码语言:javascript
运行
复制
node firstNode;
node currentNode; 
node[] dataCollection; // Will hold computer hard-drive data

因此,我想要创建一个方法,用我想要添加的数据替换最不重要的数据,这样我就可以在Insert中使用我的替换代码:

代码语言:javascript
运行
复制
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。

有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2013-04-06 18:18:21

我对解决你的问题的建议如下:

  • 定义节点类以实现可比较的接口。
  • 将数据收集实现为Skip列表--您可以使用ConcurrentSkipListMap来实现这一点。

使用SkipList实现可以确保条目按其重要性排序。

根据Java -这个类(ConcurrentSkipListMap)实现了SkipLists的并发变体,为containsKey、get、put和remove操作及其变体提供了预期的平均日志(N)时间开销。

通常,该实现允许以与平衡的二进制搜索树(即使用与log n成比例的探针数目而不是n)相媲美的效率进行项查找。

最后,查看[这里],了解关于SkipList的更多信息,以及如何编写自己的实现。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15853938

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档