- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我不想直接解决这个问题的根源,但就是这个问题 link :
所以我接收字符串并将它们添加到一个后缀数组中,该数组在内部实现为一个排序集,然后我获得的是两个给定字符串的字典顺序列表。
S1 = "banana"
S2 = "panama"
SuffixArray.add S1, S2
为了高效地搜索 k-th
最小子串,我对这个排序集进行了预处理,以添加有关后缀与其前身之间最长公共(public)前缀的信息,并密切关注累积子串数数。所以我知道对于大于最后一项的累积子字符串计数的给定 k
,这是一个无效查询。
这对于问题定义中给出的约束的小输入和随机大输入非常有效,最多 50 个长度为 2000 的字符串。我能够通过 7 个案例中的 4 个,我感到非常惊讶我没有全部拿到。
所以我去寻找瓶颈,它击中了我。给定大量这样的输入
anananananananana.....ananana
bkbkbkbkbkbkbkbkb.....bkbkbkb
第 k 个最小子串的查询仍然像预期的那样快但不是我预处理排序集合的方式...我计算集合元素之间最长公共(public)前缀的方式是不是高效和线性的 O(m),就像这样,我做了最天真的事情,期望它足够好:
m = anananan
n = anananana
Start at 0 and find the point where `m[i] != n[i]`
之所以这样是因为后缀和他的前身可能没有关系(即来自不同的输入字符串)所以我想我不得不使用暴力。
这是当时的问题,我最终将问题简化为。按照我上面描述的方式(由多个字符串组成)给出一个按字典顺序排序的后缀列表:
计算最长公共(public)前缀数组的有效方法是什么?。
子问题是,我的方法是否完全偏离了目标?如果是这种情况,请提出进一步的调查途径。
脚注,我不想展示已实现的算法,我不介意被告知去阅读某某书籍或有关该主题的资源,因为这就是我在尝试这些挑战时所做的事情.
接受的答案将指导我走上正确的道路,或者在失败的情况下;教我如何从更广泛的意义上解决这些类型的问题的东西,一本书或其他东西
最佳答案
我会推荐这个 tutorial pdf from Stanford .
本教程介绍了一个简单的 O(nlog^2n) 算法,该算法使用 O(nlogn) 空间来计算后缀数组和中间结果矩阵。中间结果矩阵可用于计算 O(logn) 中两个后缀之间的最长公共(public)前缀。
如果您想尝试自己开发算法,关键是根据字符串的 2^k 长前缀对字符串进行排序。
来自教程:
Let's denote by A(i,k) be the subsequence of A of length 2^k starting at position i. The position of A(i,k) in the sorted array of A(j,k) subsequences (j=1,n) is kept in P(k,i).
和
Using matrix P, one can iterate descending from the biggest k down to 0 and check whether A(i,k) = A(j,k). If the two prefixes are equal, a common prefix of length 2^k had been found. We only have left to update i and j, increasing them both by 2^k and check again if there are any more common prefixes.
关于string - 寻找想法 : lexicographically sorted suffix array of many different strings compute efficiently an LCP array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14282424/
我在尝试为 Android(在 linux x86_64 上)编译 Qt 5 时遇到此错误: cc1plus: error: -Werror=literal-suffix: no option -Wl
当我在 Playground xcode 9.2 上运行时,苹果文档代码中出现上述错误 https://developer.apple.com/library/content/documentatio
我根本找不到任何解释后缀数组的好的教学资源。甚至 "bible"不包括它。 我在哪里可以找到对后缀数组及其用途的清晰透彻的解释? (视频类(class)是理想的,因为我很懒。) 最佳答案 Dan Gu
我正在寻找快速suffix-array构造算法。我对实现的简易性和原始速度比渐近复杂性更感兴趣(我知道后缀数组可以通过后缀树在 O(n) 时间内构造,但这需要大量空间;显然其他算法有糟糕的最坏情况大
我的ASP.NET Web API具有Search方法,可在Elasticsearch数据库中搜索特定查询。用户还可以设置排序参数(例如属性)以进行排序,或者是否应按升序或降序排序。 http://l
我可以使用 prefix-out重命名我导出的标识符,使它们都具有相似的前缀。例如: #lang racket (provide (prefix-out mymod: (all-defined-out
我真的很想了解一个关于如何为给定模式构建良好后缀表的示例。问题是,我无法理解它。我看过很多例子,但不知道这些数字来自哪里。 所以这里是:以下示例演示了如何根据模式 ANPANMAN 构建良好后缀表:
我在 R 中使用正则表达式。我试图找出字符向量中某些字符串末尾带括号的内容。我能够在括号内的内容存在时找到它,但我无法在没有括号的输入中排除非括号内的内容。 例子: > x gsub("(.*?)(
我正在GAMS中求解模型。运行优化模型时,我想将最佳解决方案保存在新变量中。代码的核心如下所示: variables xSave(t) 'saving the value of x at opt
这是一个错误还是有文档表明不要在指令名称中使用后缀“start”?只有“完成”指令有效。 HTML: ... Angular doesn't like the suffix 'start'
我最近继承了一个遗留的 Windows 二进制文件及其源代码,它显然是用 Fortran(我不熟悉的语言)编写的。为了了解它是如何工作的,我查看了源代码,这个语法引起了我的注意: DIMENS
我刚刚发现自己创建了一个名为“InstructionBuilderFactoryMapFactory”的类。那是一类的 4 个“模式后缀”。它立即让我想起了这一点: http://www.jrolle
对于两个字符串 A 和 B,我们将字符串的相似度定义为两个字符串共有的最长前缀的长度。例如字符串“abc”和“abd”的相似度为2,而字符串“aaa”和“aaab”的相似度为3。 问题是给出一个算法来
当我反汇编 Chromium 二进制文件时,我注意到有一些函数以这种模式命名:_ZN6webrtc15DecoderDatabase11DecoderInfoD2Ev.part.1 如果我把这个字符串
我有一个字符串数组,它们是我的应用程序包中的文件名。有些是 PNG,有些是 MOV。 Swift 中有没有检查字符串后缀的好方法? 最佳答案 使用hasSuffix 和filter 方法,如下所示:
我正在尝试使用插入完成。 看来我应该使用一个名为 suffix: 的参数来告知插入结束的位置。 端点的负载:POST/v1/completions { "model": "code-davinci
我刚刚开始使用 JHipster,并且正在尝试 5.0.0-beta.1。我尝试使用 React 前端创建一个简单的应用程序。 我还尝试导入 https://www.jhipster.tech/jdl
我正在尝试使用插入完成。 看来我应该使用一个名为 suffix: 的参数来告知插入结束的位置。 端点的负载:POST/v1/completions { "model": "code-davinci
我使用 java API 根据给定的 URL 提取第二个域名。 https://github.com/whois-server-list/public-suffix-list 它基于 Mozilla
我不知道这到底叫什么,也不知道它是否可能。但基本上我想向“不完整”的方法添加内容。例如。 captureDog =()=>{ alert('caught dog'); } captureCat =
我是一名优秀的程序员,十分优秀!