有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在高效的时间和内存中动态执行insert(索引、数据)、delete(索引)、getAt(索引)操作。

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

一,>;插入(整数索引,整数数据):: 它以任意索引(就像在数组中一样)随机、动态地插入数据,但时间复杂度不同。它可以被理解为在一个数组中插入一个特定的索引,但主要特点是它可以在O(logm)时间内插入同一索引中的数据,同时从该索引开始连续移动所有存在的数据。对于eg::插入任何数据如下:
索引,数据
{
(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,内存=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)
}.
这里,在最坏的(logm)时间复杂度情况下,在预占索引处插入的元素位于同一索引上,并将所有元素移到该索引上或之外

二,>;删除(整数索引): 它会删除索引中的数据(如果存在)。最坏的情况是O(对数m)

三,>;getAt(int索引):: 它检索索引中的数据(如果存在)。最坏情况下的时间是O(logm)

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

我想知道,到目前为止,是否有人在上述4项操作中都实现了这样的时间和内存成本,如果没有,它能否获得专利? 此外,我不能透露任何关于我的算法比这


共 (1) 个答案

  1. # 1 楼答案

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