【发布时间】: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