【问题标题】:search unique URL搜索唯一网址
【发布时间】:2012-08-25 23:16:36
【问题描述】:

给定一组 100 万(非常大)的编号。 URL 的。从列表中找到“第一个”“唯一”网址。

我的方法:使用完美的散列函数构建散列,这会有所帮助。但是我的问题是hash大数据是不可能的,那我该如何解决这个问题。

有什么方法可以就地做吗? 请帮忙。提前致谢。

【问题讨论】:

  • 不,弗雷里希。其实我正在准备面试。这就是我问这个问题的原因。
  • 如果您发现一些答案有用,您应该接受它们。
  • 是的,Airza,但现在正在与 Freich 进行对话。之后我接受了他的回答。

标签: string algorithm hash string-search


【解决方案1】:

鉴于["c","a","b","a","c"] 的输入列表,我的第一种方法是:

  1. 将 URL 列表转换为元组列表,该列表将每个元素与其在列表中的位置相关联。现在你有[(0,"c"),(1,"a"),(2,"b"),(3,"a"),(4,"c")]
  2. 按第二个元组元素(URL)按字典顺序对列表进行排序。现在你有[(1,"a"),(3,"a"),(2,"b"),(0,"c"),(4,"c")]
  3. 将后续相等元组的序列(如果第二个元素相等,则元组相等)分组到子列表中。现在你有[[(1,"a"),(3,"a")],[(2,"b")],[(0,"c"),(4,"c")]]
  4. 过滤列表,使您只有长度为 1 的列表。现在您有 [[(2,"b")]]
  5. 如果结果列表为空,则列表中没有唯一的 URL。如果它非空,则按第一个元组元素(字符串中的位置)对列表进行排序。在这种情况下,您会得到相同的列表 - [[(2,"b")]]
  6. 获取列表的第一个元素。现在你有[(2,"b")]
  7. 此列表中的 (only) 元组告诉您第一个唯一 URL,以及输入列表中的位置:它是输入列表中位置 2 处的 URL b

【讨论】:

  • 但是 Frerich,我认为您尝试实现 Map/Reduce 概念。先映射,然后排序,然后配对。
  • 但这没用,这可能是Z在前,A在后,两者都只出现一次。但是在排序 A 比 Z 之前。并且给出 anser 作为 A,但实际上答案是 Z
  • @jhamb:所以?我在写这个算法时想到了 Haskell(这就是为什么列表/元组符号是这样的)。我认为实现起来相当简单,而且我怀疑 Haskell 的懒惰也可以使其相当有效。
  • @jhamb:不,这就是为什么在步骤 (5) 中您再次对唯一字符列表进行排序,这次是按它们的位置(第一个元组元素),例如[(2,"a"),(0,"z")] 变为 [(0,"z"),(2,"a")]
  • 那么,您使用哪种数据结构来实现这一点?要检查 URL 是否需要解析 URL?
猜你喜欢
  • 1970-01-01
  • 2014-02-22
  • 1970-01-01
  • 2011-06-20
  • 1970-01-01
  • 2018-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多