让我们看看n
值。所有值都是false
,可以更改为true
。我想对这些具有一定时间复杂性的值进行3次运算:
val(i)
-我真的不在乎空间的复杂性。结构在开始时以固定长度初始化。初始化需要多少时间并不重要。
用于这些操作的数据结构应该是什么样子?
使用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)
在[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中的数据已刷新,但浏览器不再显示任何数据。 代