- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
用于查找包含所有搜索关键字的最小片段的算法的复杂性是多少?
最佳答案
如前所述,这个问题是通过一个相当简单的算法解决的:
只需从头开始按顺序查看输入文本并检查每个单词:它是否在搜索关键字中。如果单词在键中,则将其添加到我们将称为当前 block 的结构的末尾。当前 block 只是单词的线性序列,每个单词都伴随着它在文本中的位置。当前 block 必须维护以下属性:当前 block 中的第一个单词必须在当前 block 中出现一次且仅出现一次。如果将新单词添加到当前 block 的末尾,并且违反了上述属性,则必须从 block 中删除第一个单词。此过程称为当前 block 的规范化。规范化是一个潜在的迭代过程,因为一旦您从 block 中删除第一个单词,新的第一个单词也可能违反该属性,因此您也必须将其删除。等等。
因此,当前 block 基本上是一个 FIFO 序列:新词到达右端,并通过规范化过程从左端移除。
解决问题所需要做的就是浏览文本,维护当前 block ,在必要时对其进行规范化,使其满足属性。您构建的包含所有关键字的最短 block 就是问题的答案。
例如,考虑文本
CxxxAxxxBxxAxxCxBAxxxC
使用关键字 A、B 和 C。通过阅读文本,您将构建以下 block 序列
C
CA
CAB - all words, length 9 (CxxxAxxxB...)
CABA - all words, length 12 (CxxxAxxxBxxA...)
CABAC - violates The Property, remove first C
ABAC - violates The Property, remove first A
BAC - all words, length 7 (...BxxAxxC...)
BACB - violates The Property, remove first B
ACB - all words, length 6 (...AxxCxB...)
ACBA - violates The Property, remove first A
CBA - all words, length 4 (...CxBA...)
CBAC - violates The Property, remove first C
BAC - all words, length 6 (...BAxxxC)
我们构建的最佳 block 的长度为 4,这是本例中的答案
CxxxAxxxBxxAxx CxBA xxxC
此算法的确切复杂度取决于输入,因为它决定了规范化过程将进行多少次迭代,但忽略规范化,复杂度将是 O(N * log M)
,其中N
是文本中的单词数,M
是关键词的数量,O(log M)
是检查的复杂度当前词是否属于关键字集合。
现在,话虽如此,我不得不承认我怀疑这可能不是您所需要的。由于您在标题中提到了 Google,因此您在帖子中给出的问题陈述可能不完整。也许在您的情况下,文本已编入索引? (通过索引,上述算法仍然适用,只是变得更有效率)。也许有一些棘手的数据库可以描述文本并允许更有效的解决方案(比如无需查看整个文本)?我只能猜测,你不是说...
关于algorithm - 谷歌搜索结果 : How to find the minimum window that contains all the search keywords?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2734313/
我是 Haskell 术语的初学者。我必须做一个显示所有最低位置的练习。 例如: [1,2,3,1,1] => 0,3,4 这些是最小位置。 我尝试用两种方法来做到这一点,但这些都不起作用。 请有人帮
我需要找到整个矩阵的最小值,它是“坐标”。在像 这样的矩阵中 matrix = 8 7 6 5 4 3 2 1 最小值为 (2, 4) 处的 1。 最佳答案 这可以很简单地通过使用
给定一个正整数“l”和“r”。找到最小的数字“n”,使得 l r: cnt = 32 for i in range(l, r+1): s = bi
numpy.minimum 似乎不适用于复数: np.minimum(5+3*1j,4+30*1j) (4+30j) 我想保持最大幅度的值。它只比较实部。元素最小比较的任何其他功能? MATLAB m
鉴于数据库中的以下事实: foo(a, 3). foo(b, 2). foo(c, 4). foo(d, 3). foo(e, 2). foo(f, 6). foo(g, 3). foo(h, 2).
假设我们给出了给定图 G 的最小生成树 T(有 n 个顶点和 m 个边)和一条权重为 w 的新边 e = (u, v),我们将添加到 G 中。 I) 检查 T 是否仍然是 MST。II) 如果不是,请
我有一个名为“posts”的elasticsearch索引。 http://127.0.0.1:9200/posts/doc/_count返回{"count":240000,"_shards":{"t
我在 MySQL 中有一个表,名称如下 我有两件事要处理 1- 停用所有未使用的书籍 isActive = 1 - Active isActive = 0 - Inactive is_inuse =
我的站点位于 www.ethoma.com/wd/ . 如您所见,我已经使用自己的代码实现了主题和所有菜单。我想在我的网站上安装 WordPress,这样我就可以简单地在 WordPress 上输入我
当我在 bool 数组上使用 numpy 函数 minimum() 和 maximum() 时,结果类型打印为 numpy.int32。但是,与 numpy.int32 类型的比较失败(即使在转换之后
我在分布式系统中遇到分片移动问题。 【问题】 最初每个分区负责任意数量的分片。 (这个数字可以是任意的,因为系统支持将分片从一个分区移动到另一个分区) 然后一个新的分区来了,系统需要重新分片。目标是使
我有 3 个这样的观点: 我需要定义一个约束,以便在蓝色或芥末色垂直调整大小时,红色 View 将保持在任一上 View 的最小距离处,例如 或者 那么我怎样才能达到那个结果呢??? 最佳答案 建立从
题目地址:https://leetcode.com/problems/minimum-area-rectangle/description/ 题目描述 Given a set of points
题目地址:https://leetcode-cn.com/problems/path-with-minimum-effort/ 题目描述 你准备参加一场远足活动。给你一个二维 rows x col
题目地址:https://leetcode.com/problems/minimum-absolute-difference/ 题目描述 Given an array of distinct in
题目地址:https://leetcode.com/problems/minimum-height-trees/description/ 题目描述 Fora undirected graph wi
题目地址:https://leetcode.com/problems/minimum-time-difference/description/ 题目描述: Given a list of 24-h
题目地址: https://leetcode.com/problems/minimum-genetic-mutation/description/ 题目描述 Agene string can be
你们能帮我解决一些我被困的家庭作业问题吗? 完整二叉树中的局部最小值被定义为小于其所有邻居(邻居 = 父、左子、右子)的节点。 我需要在给定的完整二叉树中找到一个局部最小值,它的每个节点都有不同的数字
(defun *smaller* (x y) ( if (> x y) y x)) (defun *minimum* (lst) (do ((numbers lst (cdr
我是一名优秀的程序员,十分优秀!