最近我有 开发和实现 一种算法,该算法在非摊销O(log m)时间内执行以下4项操作,其中m是存在的元素数量在记忆中= O(m)。
1.> insert(int index,int data)::
它随机地动态地插入任何索引(就像在数组中一样)但具有不同的时间复杂度。可以理解为在特定索引处插入数组但主要特征是它可以在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)。
注意::根据我的算法AS ::数据的新序列存储::
{
(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)时间复杂度最差的情况下超出索引。
2> delete(int index): 它会删除索引处的数据(如果存在)。最坏情况时间是O(log m)。
3> getAt(int index):: 它在index.Time中检索数据(如果存在),其中Worst-Case为O(log m)。
4.> printAll()::它将按索引的递增顺序打印所有元素(数据)。所有情况下的时间是O(m),m =否。存在的元素。
时间成本::
对于每个Ist 3操作,最差情况时间在m = no的任何时间都是O(log m)。当时存在的元素和最后一个元素是O(m)。
空间成本::
使用的空间是O(m),m = no。存在的元素。
因为我已经在互联网上搜索过,但并没有找到所有上述4项操作的优化时间和空间费用。
我想知道这样的时间和内存成本是否已被任何人现在所有4次操作所取代,如果不是,它是否可以获得专利? 此外,我无法透露任何有关我的算法的信息....
答案 0 :(得分:0)
我不认为这是可能的。
如果我们使用有序二进制搜索树,那么对于上面的测试用例,它需要时间为O(log 58999!),空间为O(58999)。
这是因为必须创建所有空节点才能到达最后一个索引
即使我们使用数组,我们也必须创建直到58999索引的数组,而且最坏情况插入将花费O(58989)时间复杂度。
@Gaara:令人惊讶的是,在最坏的情况下你已经达到了O(log 15)的时间复杂度,但是对于获得专利我真的不知道。因为你不会透露更多关于你算法的信息......
@David Eisenstat:我也想知道你将如何实现它。