当前位置: 首页 > 知识库问答 >
问题:

表示包含3个操作的二值数组的数据结构

拓拔泉
2023-03-14

让我们看看n值。所有值都是false,可以更改为true。我想对这些具有一定时间复杂性的值进行3次运算:

  • val(i)-

我真的不在乎空间的复杂性。结构在开始时以固定长度初始化。初始化需要多少时间并不重要。

用于这些操作的数据结构应该是什么样子?

共有2个答案

侯涵煦
2023-03-14

使用hashmap和二进制搜索树的组合。

假设布尔值[]A={false, false, false, false}

创建hashmap(key为整数,value为Object)

迭代每个项目:1.以index和value作为属性创建对象。2.将对象添加到地图。3.使用BST中位置的对象索引将相同的对象添加到BST。

现在执行以下操作:

>

更改(i, true/false):再次从map获取对象并更新其值。

查找(i):检查该地图中对象的值是否为假。如果为false,则返回,否则在BST中进行遍历,以检查值为false的最近索引。注:基于对象密钥的BST遍历可以在O(logn)中完成。因此复杂性O(logn)

岳英耀
2023-03-14

在[0,n]上建立一个段树,对于每个基本间隔[i 2^k,(i 1)2^k),存储该间隔中布尔值的and。

val(i)是恒定时间的,因为它只是一个数组查找。

change(i)如果我们改变通常的向根传播算法,使其在特定级别没有变化的情况下提前退出,则按固定时间摊销。这是因为在任何给定的时间,从根到间隔k级别的写入次数最多是从根到间隔k 1级别的写入次数的一半(通过对k的归纳来证明这一点)。

find(i)可以在对数时间内实现,如下所示。首先观察,找到最近的假左邻居和最近的假右邻居就足够了,然后取两者中较近的一个。要为位置i查找最近的假右邻居,将[i,n)分解为基本区间。找出这些区间中最左边包含假的区间(即its和is false)。从该区间开始,向前看,检查每一级的左半部分是否有假。如果有,向下看;否则,使用右半部分。

在单位成本RAM(即实际硬件的理论版本)上,我们可以通过将树扇出从2更改为字长(Theta(logn))并使用位操作,获得O(n/logn)存储字的find(i)时间O(logn/logn)时间。

 类似资料:
  • 问题内容: 我正在尝试使用。我对处理包含数组的C结构感兴趣。考虑以下 并假设我已经将其编译到共享库中了从Python我可以做这样的事情 到目前为止一切顺利:我已经创建了正确的类型,并且一切似乎都正常。但是之后: 我显然缺少了一些东西。该类型是公认的(否则呼叫将抛出一个错误),但不正确初始化。 问题答案: 代码有2个问题(如我在评论中所述): print_array_struct.argtype-

  • 本文向大家介绍数据结构中的ADT数组表示,包括了数据结构中的ADT数组表示的使用技巧和注意事项,需要的朋友参考一下 基本概念 ADT表示抽象数据类型。 数组被定义为ADT,因为它们能够以相同的顺序保存连续的元素。他们允许 通过索引或位置访问特定元素。 它们是抽象的,因为它们可以是String,int或Person 好处 快速随机访问项目或元素。 内存效率很高,除了存储内容所需的内存很少。 缺点 元

  • 我有一个称为“Profile”的对象列表,每个Profile都有一个功能列表(一个Profile可以做的事情)和一个与该Profile关联的用户列表。 我想在一个JTable中显示这些信息。首先,用le功能显示配置文件,然后显示该配置文件中的用户。类似这样的事情: 因此,首先,我实现了一个更聪明的getRowCount()方法,然后是一个getValueAt方法,该方法在JTable中打印一个配置

  • 问题内容: 以下是gcc 4.4.4下的简单代码段错误 将最后一行更改为 工作良好。使用编译时,这两个版本均可使用。我是在简单地调用未定义的行为,还是在标准中进行了某些更改,从而使代码可以在C99下工作?为什么在C89下崩溃? 问题答案: 我相信C89 / C90和C99中的行为均未定义。 是数组类型的表达式,特别是。 C99 6.3.2.1p3说: 除非它是 sizeof 运算符或一元 & 运算

  • 定义一个20*5的二维数组,用来存储某班级20位学员的5门课的成绩;这5门课按存储顺序依次为:core C++,coreJava,Servlet,JSP和EJB。 (1)循环给二维数组的每一个元素赋0~100之间的随机整数。 (2)按照列表的方式输出这些学员的每门课程的成绩。 (3)要求编写程序求每个学员的总分,将其保留在另外一个一维数组中。 (4)要求编写程序求所有学员的某门课程的平均分。 解决

  • 我创建了自定义自动完成,在这里我想使用手动输入输入,并从数据库中提供选项。所以我创建了javascript代码,它从DB中获取数据并将它们放入datalist。对于第一次搜索,所有这些都很好,但我实现了分隔符,这样我就可以在输入字段中添加多个值(我希望有一个电子邮件列表)。当我的代码再次调用ajax进行下一次自动完成时,我在控制台中看到datalist中的数据已刷新,但浏览器不再显示任何数据。 代