用于在已排序数据中快速插入和随机访问的数据结构

时间:2018-06-06 13:32:26

标签: python python-3.x list data-structures tree

p = random_point(a,b)
#random_point() returns a tuple/named-tuple (x,y)
#0<x<a 0<y<b
if centers.validates(p):
    centers.insert(p)
#centers is the data structure to store points

centers数据结构中,所有xy坐标都存储在两个单独的排序(升序)列表中,一个用于x,另一个用于y }。 x中的每个节点都指向相应的y,反之亦然,以便它们可以单独排序并仍保留配对属性:centers.get_x_of(y)centers.get_y_of(x)

enter image description here

我在数据结构中需要的属性:

  1. 快速插入,已经排序的数据(最好是log n)
  2. 随机访问
  3. 分别对x和y进行排序,而不会丢失对属性
  4. 最初我想过使用简单的Lists,并使用Binary search来获取插入任何新元素的索引。但我发现,使用像AVL或B树这样的自平衡树可以改善它。我可以为xy分别创建两个树,每个节点都有一个可以从x-tree节点指向y-tree节点的附加指针。

    但我不知道如何在这些树中构建随机访问功能。函数centers.validate()尝试插入x&amp; y,并对相邻元素进行一些检查,这需要随机访问:

    def validate(p):
        indices = get_index(p)
        #returns a named tuple of indices to insert x and y, Eg: (3,7)
        condition1 =  func(x_list[indices.x-1], p.x) and func(x_list[indices.x+1], p.x)
        condition2 =  func(y_list[indices.y-1], p.y) and func(y_list[indices.y+1], p.y)
        #func is some mathematical condition on neighboring elements of x and y
        return condition1 and condition2
    

    在上面的函数中,我需要访问x&amp;的相邻元素。 y  数据结构。我认为在树中实现这一点会使它复杂化。是否有任何数据结构组合可以实现这一目标?我用Python写这个(如果可以帮助的话)

1 个答案:

答案 0 :(得分:0)

具有2个字典的类,其中的键包含值,而键是另一个dict的键,另一个dict包含与此dict中的值相关的值。它需要为每个字典维护一个列表,以便当前顺序在调用该字典时调用该字典的元素(您当前的那种字典值)。您将需要二进制或其他有效的排序方式来对每个字典进行插入操作,尽管它实际上是使用该字典的顺序列表来找到每个中点键,然后根据该键的值进行检查。