【问题标题】:a smart brute force algorithm for finding a book?找书的智能蛮力算法?
【发布时间】:2015-05-16 21:43:15
【问题描述】:

我想编写一个蛮力算法来尝试在图书馆中找到一本书。如果您要找的书不在那里,您需要多长时间才能完成? 任何智能蛮力方法?

我正在考虑在图书馆书名所在的列表中搜索书名并从列表的中心开始?

【问题讨论】:

  • 除非您订购数据,否则您将没有“智能蛮力”。如果你订购你的数据(复杂度 NlogN),你可以在 logN 时间内找到你想要的,使用二分搜索
  • 蛮力,几乎按照定义,往往不是“聪明的”
  • 如果您正在寻找一种快速表达“这本书不在这里”的方式,请查找 Bloom Filters。
  • 为了降低找书的成本,只比较目标名称的第一个字符和书名。只有当第一个字符匹配时,才应检查书的全名。
  • 1.过滤所有书籍,以便缩小范围(您是唯一知道要查找什么的人),2. 将所有这些条目添加到数据库中,3. 数据挖掘

标签: algorithm brute-force


【解决方案1】:

您应该在why GNU grep is fast 上阅读这篇文章并尝试他的方法。简而言之,他说:

  • 使用 Boyer-Moore(并展开其内循环几次)。

  • 使用原始系统调用滚动您自己的无缓冲输入。避免复制 在搜索它们之前输入字节。 (但是,请使用缓冲 输出。正常的grep场景是输出量是 与输入量相比很小,因此输出的开销 缓冲区复制很小,同时由于避免了许多小 无缓冲的写入可能很大。)

  • 在找到匹配项之前不要在输入中查找换行符。

  • 尝试进行设置(页面对齐的缓冲区、页面大小的读取块、 可选地使用 mmap),这样内核也可以避免复制字节。

使程序快速运行的关键是让它们几乎什么都不做。 ;-)

Grep 完全符合您的要求:蛮力搜索无序数据 - 他的算法很聪明,尽管它是蛮力。

【讨论】:

    猜你喜欢
    • 2017-08-19
    • 2015-06-22
    • 1970-01-01
    • 2015-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多