- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我的问题是:我有一大串数字。我知道,在某个点之后,它会变成周期性的——也就是说,序列的开头有 k 个数字,然后还有 m 个数字在序列的其余部分重复。为了更清楚地说明这一点,序列可能如下所示:[1, 2, 5, 3, 4, 2, 1, 1, 3, 2, 1, 1, 3, 2, 1, 1, 3 , ...],其中 k 为 5,m 为 4,则重复 block 为 [2, 1, 1, 3]。从这个例子中可以清楚地看出,我可以在较大的 block 内有重复位,因此只查找第一个重复实例并没有帮助。
但是,我不知道 k 或 m 是什么 - 我的目标是将序列 [a_1, a_2, ... , a_n] 作为输入并输出序列 [a_1, ... , a_k, [ a_(k+1), ... , a_(k+m)]] - 基本上是通过将大部分序列列为重复 block 来截断较长序列。
有没有一种有效的方法来解决这个问题?此外,在计算上可能更难但更理想 - 是否可以在我生成有问题的序列时执行此操作,以便我必须生成最小数量?我在这个网站上看过其他类似的问题,但它们似乎都处理没有开始非重复位的序列,而且通常不必担心内部重复。
如果它有帮助/有用,我还可以了解我为什么要看这个以及我将用它做什么。
谢谢!
编辑:首先,我应该提到我不知道输入序列是否恰好在重复 block 的末尾结束。
我试图解决的现实问题是为二次无理数(实际上是负 CFE)的连分数展开式 (CFE) 编写一个漂亮的封闭式表达式。为这些 CFE 生成任何精度的部分商*非常简单 - 然而,在某些时候,二次无理数的 CFE 的尾部变成重复 block 。我需要处理这个重复 block 中的部分商数。
我目前的想法是:也许我可以调整一些建议的算法,从右边开始工作,以处理其中一个序列。或者,也许在证明二次无理数为什么是周期性的证据中可以帮助我理解为什么它们开始重复,这将帮助我提出一些简单的标准来检查。
*如果我将连分数展开写为 [a_0, a_1, ...],我将 a_i 称为部分商。
感兴趣的人可以在这里找到一些背景信息:http://en.wikipedia.org/wiki/Periodic_continued_fraction
最佳答案
您可以使用 rolling hash实现线性时间复杂度和 O(1) 空间复杂度(我认为是这种情况,因为我不相信你可以有一个无限重复的序列,其中两个频率不是彼此的倍数)。
算法:您只需保留两个滚动散列,它们会像这样展开:
_______ _______ _______
/ \/ \/ \
...2038975623895769874883301010883301010883301010
. . . ||
. . . [][]
. . . [ ][ ]
. . .[ ][ ]
. . [. ][ ]
. . [ . ][ ]
. . [ .][ ]
. . [ ][ ]
. [ ][ ]
在整个序列中继续这样做。第一遍将只检测重复 2*n 次的某些 n 值。然而,这不是我们的目标:我们在第一遍中的目标是检测所有可能的周期,而这正是这样做的。当我们沿着执行此过程的顺序前进时,我们还会跟踪所有我们稍后需要检查的相对黄金时期:
periods = Set(int)
periodsToFurthestReach = Map(int -> int)
for hash1,hash2 in expandedPairOfRollingHashes(sequence):
L = hash.length
if hash1==hash2:
if L is not a multiple of any period:
periods.add(L)
periodsToFurthestReach[L] = 2*L
else L is a multiple of some periods:
for all periods P for which L is a multiple:
periodsToFurthestReach[P] = 2*L
在这个过程之后,我们得到了所有时期的列表以及它们已经达到了多远。我们的答案可能是覆盖范围最远的那个,但我们会检查所有其他时间段是否重复(速度很快,因为我们知道要检查的时间段)。如果这在计算上很困难,我们可以通过在遍历列表时修剪掉周期(停止重复)来优化,非常像 Eratosthenes 的筛子,通过保留我们下一次期望周期重复的时间的优先级队列。
最后,我们仔细检查结果以确保没有哈希冲突(即使有也不太可能,列入黑名单并重复)。
这里我假设你的目标是最小化非重复长度,而不是给出可以进一步分解的重复元素;您可以修改此算法以查找所有其他压缩(如果存在)。
关于arrays - 在数字序列的末尾查找重复序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10441715/
我正在更改链接网址以添加 www.site.com/index.html?s=234&dc=65828 我通过此代码得到的是:site.com/&dc=65828 var target="&dc=65
我在编译过程中收到错误: src/smtp.c:208:1: warning: control reaches end of non-void function [-Wreturn-type] 这是相
这是我的 bootstrap/html 代码: Put email 位置正确,但我希望输入字段的大小延伸到 div 末尾。谁能帮帮我? 最佳答案 只需按百分比指定宽度,如下所示
我正在尝试获取一个像这样的 json 对象: filters = {"filters": myArray}; 并将其附加到 URL 的末尾,使用: this.router.navigate([`/de
这个问题已经有答案了: Remove hash from url (5 个回答) 已关闭 10 年前。 我有一个网站,stepaheadresidents.com ,并且井号 (#) 会自动添加到 u
我有这个代码 $('container a').appendTo('.container'); dzedzdqdqdqzdqdzqdzqdqzdqd Forgot password
为了练习更多 Python 知识,我尝试了 pythonchallenge.com 上的挑战 简而言之,作为第一步,此挑战要求从末尾带有数字的 url 加载 html 页面。该页面包含一行文本,其中有
我对 FS2 很陌生,需要一些有关设计的帮助。我正在尝试设计一个流,它将从底层的 InputStream 中提取 block ,直到结束。这是我尝试过的: import java.io.{File,
我对 FS2 很陌生,需要一些有关设计的帮助。我正在尝试设计一个流,它将从底层的 InputStream 中提取 block ,直到结束。这是我尝试过的: import java.io.{File,
我正在编写一个 ajax 应用程序,并且在 php 脚本中有一个函数: public function expire_user() { $r=array("return"=>'OK');
我正在使用一个QListView,它包装了一个非常简单的列表模型。我想尝试实现类似于某些网页中看到的“无限滚动”的东西。 目前,模型通过最多添加 100 个项目的方法更新(它们取自外部 Web API
运行 cucumber 测试给我以下错误 end of file reached (EOFError) /usr/lib64/ruby/2.0.0/net/protocol.rb:153:in
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我想知道版本命名的具体作用是什么? 喜欢 jquery.js?ver=1.4.4 我的意思是如果我使用像这样的 cdn jquery/1.4.4/jquery.min.js?ver=1.4.4但是另一
" data-fancybox-group="gallery" title="">" alt="" /> 在此代码中 echo $prod['item_image_url'];打印存储在我的表中的图像
我目前使用 Wordpress 作为博客平台,但我想更改为使用 Jekyll 来生成静态页面。在 WordPress 上,我的 URL 使用以下格式: /年/月/日/标题 但我想将其重定向到 /年/月
根据docs这应该是不可能的 Regular expressions cannot be anchored to the beginning or end of a token 尽管如此,它似乎对我有
有没有办法创建 dijit 并将其附加到 div 的末尾?假设我有以下代码: Add Person 我在网上找到了以下代码,但这替换了我的“attendants”div: var personCo
我有这段代码: //execute post (the result will be something like {"result":1,"error":"","id":"4da775
我需要一些函数方面的帮助。 我想编写一个插入链表的函数。但不仅仅是中间,如果必须插入前端或末尾,它也必须起作用。 结构: typedef struct ranklist { i
我是一名优秀的程序员,十分优秀!