【问题标题】:DYNAMICALLY perform insert(inedex,data), delete(index), getAt(index) operations in Efficient time and memory.在高效的时间和内存中动态执行 insert(inedex,data)、delete(index)、getAt(index) 操作。
【发布时间】:2015-05-20 18:04:23
【问题描述】:

最近我开发并实施了一种算法,该算法在非摊销 O(log m) 时间内执行以下 4 次操作,其中 m 是存在的元素数在内存中=O(m)。

1.>插入(整数索引,整数数据):: 它在任意索引处随机动态插入数据(就像在数组中一样),但时间复杂度不同。可以理解为在特定索引处插入数组,但主要特点是它可以在 O(log 中的相同索引处插入数据m)时间以及从该索引开始连续存在的所有数据。例如::将任何数据插入为:
索引,数据
{
(1 ,0),
(2 ,1),
(78 ,2),
(0 ,3),
(45 ,4),
(58999,5),
(32111,6),
(1 ,7),
(78 ,8),
(78 ,9),
(78 ,-1),
(0 ,-2),
(0 ,-3),
(0 ,-4),
(23 ,-5)
}。那么所有插入的总时间复杂度是 O(log (m!) ),这里 m=15 和 Memory= O(15)。 注意:: 新的数据序列按照我的算法存储为:: {
(0,-4),
(1,-3),
(2,-2),
(3,3),
(4,7),
(5,0),
(6,1),
(23,-5),
(45,4),
(78,-1),
(79,9),
(80,8),
(81,2),
(32111,6),
(58999,5)
}.
在最坏情况下(log m)时间复杂度,在 PREOCCUPIED INDEX 处的插入与在该索引上和之外移动所有元素的索引相同。

2.> 删除(整数索引): 它会删除 index 处的数据(如果存在)。最坏情况时间是 O(log m)。

3.> getAt(int index):: 它在索引处检索数据(如果存在)。最坏情况下的时间是 O(log m)。

4.> printAll():: 它将按索引的递增顺序打印所有元素(数据)。所有情况下的时间是O(m),m = no。存在的元素。 时间成本:: 这里 Ist 3 操作中的每一个的最坏情况时间在 m=no 的任何时间都是 O(log m)。当时存在的元素和最后一个元素是 O(m)。 空间成本:: 使用的空间是 O(m),m= no。存在的元素。
因为我已在互联网上彻底搜索,但未找到针对上述 4 项操作的时间和空间成本如此优化的解决方案。

我想知道到目前为止,是否有人已经为以上 4 次操作实现了这样的时间和内存成本,如果没有,它可以申请专利吗? 此外,我不能透露更多关于我的算法的信息......

【问题讨论】:

  • 我投票结束这个问题,因为它不是一个真正的特定编程问题,而是一个关于知识产权以及对计算机科学最新技术研究的问题。
  • 是的,众所周知,这些界限是可以实现的。
  • @Mr.大卫 :: 你能分享那个众所周知的算法的链接,或者如果没有链接,请分享那个算法。

标签: java arrays algorithm optimization dynamic-arrays


【解决方案1】:

我认为这是不可能的。 如果我们使用有序二叉搜索树,那么对于上述测试用例,时间为 O(log 58999!),空间为 O(58999)。
这是因为必须创建所有空节点才能到达最后一个索引。
即使我们使用数组,我们也必须创建数组直到 58999 索引,而且最坏情况下的插入将花费 O(58989) 时间复杂度。
@Gaara:令人惊讶的是,您在最坏的情况下实现了 O(log 15) 时间复杂度,但对于获得专利,我真的不知道。因为您不会透露更多关于您的算法的信息...
@David Eisenstat:我也想知道你将如何实现它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-14
    • 1970-01-01
    • 2020-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多