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了(或者也可以跟上面数组一样,与最后一个索引替换,然后删除最后一个索引)

  • 相关阅读:
    luoguP4113 [HEOI2012]采花
    JDOJ1100: Fix
    luoguP1972 [SDOI2009]HH的项链
    luoguP3431 [POI2005]AUT-The Bus
    luoguP5094 [USACO04OPEN]MooFest 狂欢节
    【转】主定理
    LeetCode 392. Is Subsequence 详解
    花式求解 LeetCode 279题-Perfect Squares
    利用遗传算法求解TSP问题
    DAPP开发初探——永存的留言
  • 原文地址:https://www.cnblogs.com/whuyt/p/4829913.html
Copyright © 2011-2022 走看看