zoukankan      html  css  js  c++  java
  • Assignment 1-2 :Randomized Queues

    分析了下用 linked list 不能保证均摊时间为线性:比如在一开始插入M个元素,然后从后往前删除M个元素,这样需要的均摊时间为 0.5M2/2M 位 0.25M,即是用一个tail node,每次从head,tail中选取较近的那个进行遍历删除操作,所需均摊时间仍为线性。

    考虑用resizing array,面对这样一个问题,假设已经有n个元素的array,随机删除一个元素后,我们要把那个空怎么补?依次将后面的元素放上来肯定不行,这样均摊时间肯定不是线性。想到一个好方法,用数组的最后一个元素替换(就像 BST 中删除操作一样),这样一来,删除操作只要O(1), 均摊时间肯定满足要求。

    那这里的迭代器怎么实现呢?题设要求多个迭代器彼此独立(即每个迭代器都有自己的random order)。我们可以构造一个数组,数组大小为size,因为要求的迭代器不支持remove操作,所以数组中只要放置元素数组的索引就ok了(这里是1、2、3... n),然后只要将这个数组shuffle就ok了(或者也可以跟上面数组一样,与最后一个索引替换,然后删除最后一个索引)

  • 相关阅读:
    Java基础---多线程
    Java基础---多态、内部类、异常、包
    Java基础---继承、抽象、接口
    Java基础---面向对象
    NSOperation使用
    根据两个日期计算相差的年月日
    代理模式简单说明
    Lua程序设计入门
    zmq-ios framwork
    cocoapods安装与使用
  • 原文地址:https://www.cnblogs.com/whuyt/p/4829913.html
Copyright © 2011-2022 走看看