用于模拟停车场空间可用性的数据结构

时间:2015-02-16 06:04:53

标签: data-structures tree

考虑到停车场,可以将其划分为以下层次结构。

                                Structure

            Level1               Level2                 Level3

       Row1   Row2   Row3    Row1  Row2   Row3      Row1   Row2   Row3

       1...N   1...N  1...N  1...N N....N  1....N  1.....N 1....N 1.....N

此处最底层是连续可用的1到N个点。它非常类似于树数据结构,其中每个节点可以在其子树之一具有可用空间时保持值为true,如果所有子节点都被占用则为false。然后是下一行或者在级别的情况下,检查下一级别。现在我有以下问题:

  1. 是否存在一个树数据结构,它可以在不同的级别上具有不同数量的子节点E.g对于级别2为3,对于级别3为N.
  2. 如果这样的树可能会有什么时间复杂性?
  3. 如果无法使用这样的树,可以使用哪种数据结构来表示此层次结构。

2 个答案:

答案 0 :(得分:0)

基本上,您的问题要求树在每个级别具有任意数量的节点。可以使用 left-child,right-sibling 表示来表示这样的树。而不是通常的二进制树的左右子指针,在这种表示中你有以下指针。

  1. 左子:此指针指向节点的最左侧子节点。如果没有孩子,则为空。
  2. 右兄弟:此指针指向紧靠给定节点右侧的节点(在同一级别上)。如果给定节点本身是最右边的节点,则为空。
  3. 上面的表示允许使用O(n)空间为n个节点表示任意树。有关详细信息,请参阅here

    否则,您还可以使用简单(C ++)向量或链接列表在每个节点上存储任意数量的子指针。当然,这需要比左子,右兄弟表示更多的内存,但同时,这在访问特定节点时处理的节点方面更快。

答案 1 :(得分:0)

回答你的问题:

  1. 是的,您可以根据自己的要求实施树。数据结构将是这样的;

    public abstract class ParkingLotTreeNode {
        private ParkingLotTreeNode [] childNodes;
    
    }
    

    这样,每个节点都将包含其子节点的数组,这样您就可以为停车场设置任意数量的级别和行。

  2. 通过上述基本方法,找到停车场的最坏情况将是停车场停车位的总数,这不是寻找空槽的好方法。

    可以进行改进以存储在何时设置的布尔标志 特定的孩子的所有停车位都填满了。在 每个节点我们都会有一个标志,表示它的子节点是否有任何节点 剩下的免费点。

    public abstract class ParkingLotTreeNode {
        private ParkingLotTreeNode [] childNodes;
        private Boolean isFull = false;
    }
    

    这样找到免费插槽的时间相对较短,因为我们事先知道Levels / Rows已经满了并且不会被遍历。

  3. 希望有所帮助!