【问题标题】:Algorithm for iterating through all strings of shortest lengths?遍历所有最短长度字符串的算法?
【发布时间】:2016-04-27 23:50:57
【问题描述】:

我正在制作一个 URL 缩短器,并且我想为每个给定的 URL 使用尽可能短的字符串。每个 URL 都有不同的到期日期。

例如,让我们提交缩短为以下列表的 URL:

a, b, c, ..., z, 0 ..., 9, aa, ab, ac, ... a9, ba

然后,假设 c 过期,因此下一个 URL 应缩短为 c 而不是 bb,因为 c 较短且未被占用。

什么数据结构有利于跟踪这个?

【问题讨论】:

    标签: algorithm data-structures


    【解决方案1】:

    我会使用一个优先级队列,它的比较器有嵌套规则,第一个是空或被占用的标志,第二个是字符串。请记住,PQ 将您最需要的对象放在队列的顶部。因此,您的对象应该是字符串名称和布尔标志的组合。

    【讨论】:

    • PQ 不能用于任何数量的条目,但必须有限制。
    • 我不知道。 PQ 是unbounded,除非它以编程方式设置为某个限制。
    • 实际上你是对的,有一个简单的方法可以解决这个问题。另一个问题是,如果添加了大量元素,那么它们将永远在 PQ 中,占用大量空间。我想我可以定期清除它们。
    • 同样,这是依赖于应用程序的。如果维护一个跟踪过期 URL 的简单计数器,则 PQ 只能增长到某个 LIMIT。一旦过期 URL 的数量超过 LIMIT,我们就可以删除/轮询对象。
    【解决方案2】:

    这是一个有趣的问题。为此,您需要几个数据结构。这就是我会做的。

    1) 一个哈希表,以短 URL 作为键,所有 URL 信息(完整 URL、到期时间等)作为值。

    2) 过期 URL 的最小堆。这将允许您快速抓取和重用可用的最短 URL。

    3) 一个字符串,用于跟踪正在使用的最长短 URL。如果没有更短的过期 URL,这使您可以快速生成新 URL。

    4) 跟踪过期时间的东西,这样您就可以有效地使 URL 过期。可以是 Date-->ShortURL 形式的哈希表,带有有序的键,这样你就可以很容易地得到下一个过期的 url。

    【讨论】:

      【解决方案3】:

      我会使用 2 个堆。

      1. 未使用 url 的最小堆,其中最小值是 url。
      2. 已用 url 的最小堆,其中最小值是自 1970 年 1 月 1 日以来的秒数(长值)。

      当你需要一个新的url时,从堆1的顶部拉取。当一个url过期时,从堆2拉取url并插入到堆1中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-24
        • 2019-04-28
        相关资源
        最近更新 更多