计算机科学

为学生,研究人员和计算机科学从业者提供的问答

1
寻找最长的重复子序列
给定字符串,我想找到最长的重复(至少两次)子序列。也就是说,我想找到一个字符串,它是的子序列(不一定是连续的),使得。也就是说,是一个字符串,其一半连续出现两次。请注意,是的子序列,但不一定是子字符串。ssswwwsssw=w′⋅w′w=w′⋅w′w=w' \cdot w' wwwwwwsss 例子: 对于“ ababccabdc”,它将是“ abcabc”,因为“ abc” =“ abc”和“ abc”在“ ababccabdc”中(至少)出现了两次(至少)。 对于“ addbacddabcd”,一个选项为“ dddd”,因为“ dd”出现两次(我不能多次使用相同的字母,但是这里我有4个“ d”,所以还可以),但其值为4。我可以找到更好的一个长度8:“ abcdabcd”,因为“ abcd”是“ addbacddabcd”的子字符串,该子字符串出现两次。 我有兴趣找到最长的重复子序列。这也称为“找到最长/最大的平方”,但我读过许多文章,其中为子字符串而不是子序列定义了平方。 我可以轻松地使用蛮力算法,该算法通过迭代字符串中的断点的所有选项来获取,然后我将在两个字符串中寻找最大/最长的公共子序列,但是使用动态编程技术每次检查将花费,因此整个时间将是。我发现了最长公共子序列更有效的算法,该算法采用,因此运行时间将为。O(n3)O(n3)O(n^3)O(n2)O(n2)O(n^2)O(n3)O(n3)O(n^3)O(n2logn)O(n2log⁡n)O(\frac{n^2}{\log n})O(n3logn)O(n3log⁡n)O(\frac{n^3}{\log n}) 我正在寻找一种更有效的算法来解决最长重复子序列问题。也许我对所有断点进行迭代的想法浪费了太多时间,并且可以减少为更少的迭代。或者也许以不同的态度解决这个问题。 我搜索了许多期刊和以前的问题,发现的大多数结果都与子字符串有关,而不是与子序列有关。 我还读到可以使用后缀树来完成此操作,但这也与子字符串有关,我不确定是否可以将这种想法扩展到子序列。 我正在寻找可以在时间中运行的解决方案。如果在时间上存在一个会更好(我不确定是否存在)。O(n2)O(n2)O(n^2)O(n⋅logn)O(n⋅log⁡n)O(n \cdot \log n)

3
参考计数GC与跟踪GC是语言属性还是实现属性?
有时我们会听到“ Swift不执行经典(跟踪)GC,而是使用ARC。” 但是我不确定Swift语义中是否有需要引用计数的内容。似乎可以构建自己的Swift编译器和运行时以使用跟踪GC。 那么Swift的“引用计数”到底是什么?苹果的实现还是语言本身?语言或库中是否有某些部分强烈支持ARC,因此我们可以为语言本身使用该标签?

1
伪随机序列预测
免责声明:我是一名生物学家,对于如此粗略的措辞(也许)是一个基本问题,我们深表歉意。 我不确定是否应该在这里还是在DS / SC上问这个问题,但是CS是三个中最大的一个,所以去吧。(发布之后,我发现交叉验证可能是更合适的选择,但是可惜)。 想象有一个代理,他做出二进制决策。还有一个环境,对于代理的每个决定(“试验”),奖励或不奖励代理。奖励代理商决定的标准并不简单。通常,标准是随机的,但有一定的局限性,例如,环境对同一决策的奖励永远不会超过3倍,并且对奖励决策的选择也不会连续超过4次。 条件序列可能看起来像这样 0 0 0 1 0 1 0 0 1 1 1 0 1 1 0 0 1 0 ... 但从来没有 0 0 0 1 0 1 0 0 1 1 1 1 1 1 0 0 1 0 ... 因为奖励标准不能重复超过3次。 在这种情况下,制定理想的观察者应该采取的使报酬最大化的策略是很容易的。遵循以下原则 随机决定 如果您检测到该标准重复了3次-决定与上一个标准相反 如果您发现该标准交替出现了4次,请根据最后一个标准进行决策 …

3
DFA用于接受的形式的功率的所有二进制字符串
我们可以形成DFA接受可以被整除的二进制数nnn。 例如,接受DFA的二进制数可以被2整除的格式如下: 类似地,可以将DFA接受可以被3整除的二进制数字,其格式如下: 我们可以按照定义明确的程序来形成这些类型的DFA。但是,是否可以使用任何明确定义的过程或更准确地说形成DFA接受形式的数字的逻辑?nknkn^k 例如,让我们考虑DFA接受格式为所有数字。这个语言是{ 1 ,10 ,100 ,1000 ,。。。},因此有正则表达式10 ∗。我们可以按照以下方式形成DFA: 2k2k2^k{1,10,100,1000,...}{1,10,100,1000,...}\{1,10,100,1000,...\}10∗10∗10^* 我尝试为和类似的对象形成DFA ?但未能做到。还是仅仅是它的2 n个二进制等价物的模式使得创建DFA成为可能,而我们不能形成DFA来接受特定n的所有形式为n k的二进制数?3k3k3^k2n2n2^nnknkn^knnn

2
检查反导数的可确定性?
假设我有两个函数FFF和GGG,我有兴趣确定是否 F(x)=∫G(x)dx.F(x)=∫G(x)dx.F(x) = \int G(x)dx. 假设我的函数由基本函数(多项式,指数函数,对数和三角函数)组成,而不是泰勒级数。 这个问题可以确定吗?如果不是,那是不可决定的吗? (我之所以问是因为我正在教一门关于可计算性的课程,一个学生问我TM是否可以帮助您集成目前未知的函数。我怀疑我们不知道如何集成的函数更多适当的函数,其积分不能表示为上述基本函数的组合,而不是我们实际上不了解积分的函数,但这让我开始思考检查积分的一般问题是否可以确定。)


1
非确定性图腾机中的非确定性是否与有限自动机和下推自动机不同?
假设输入字符串为。然后,如果某个NFA当前处于状态(并且已读取输入的最大字母),则在读取下一个输入符号之前,如果存在以下转换,则NFA会分成两个NFA,一个处于状态,另一个处于。类型。如果存在类型为,其中是NFA的某些状态,那么记住状态另一个NFA 直到读取输入直到字母 ř 瓦特我 ř 小号ř ε →交通小号ř ε →交通小号ε →交通 q 1。。。。ϵ → q k ϵ → r q i r w i r w i r ϵ ,ϵ → a → s ϵ ,ϵ → a → q 1w1w2...wnw1w2...wnw_1w_2...w_nrrrwiwiw_irrrsssr →ϵsr→ϵsr \xrightarrow{\epsilon} sr →ϵs →ϵq1个。。。。→ϵqķ→ϵ[Rr→ϵs→ϵq1....→ϵqk→ϵrr \xrightarrow{\epsilon} s \xrightarrow{\epsilon} q_1....\xrightarrow{\epsilon} …

1
如何实际测量文件的熵?
我现在正在尝试测量文件中包含的许多非冗余(实际)信息。有人称这为熵的量。 当然有标准的p(x)log {p(x)},但我认为Shannon只是从通过信道传输的角度考虑它。因此,公式需要一个块大小(以位为单位,通常为8)。对于大文件,这种计算是相当无用的,忽略了符号之间的短距离到长距离的相关性。 有二叉树方法和Ziv-Lempel方法,但这些方法在本质上似乎具有很高的学术性。 可压缩性也被认为是熵的量度,但是对于压缩程度似乎没有下限。对于我的文件hiss.wav, 原始的hiss.wav = 5.2 MB 通过香农公式的熵= 4.6 MB hiss.zip = 4.6 MB hiss.7z = 4.2 MB hiss.wav.fp8 = 3.3 MB 是否有某种合理可行的方法来测量hiss.wav中存在多少熵?
9 entropy 

1
冲突驱动子句学习回溯澄清
在这里的Wikipedia页面上,它很好地描述了CDCL算法(似乎图片是由普林斯顿的Sharad Malik创建的幻灯片拍摄的)。但是,当描述如何回溯时,它只是说“到适当的位置”。MiniSAT还使用了CDCL算法的变体,因此我阅读了本文。他们似乎在说,您应该回溯到Learned子句是unit子句之前。那当然是澄清,但对我来说没有意义。据我所知,最后一个赋值肯定会成为学习到的冲突子句的一部分(也许我在这里错了?),所以当您回溯一步时,您将立即使学习到的子句成为单位,最后分配的值将翻转,并且该算法将完全按照DPLL进行,而不会回溯足够远。另外,维基百科页面不遵循此规则,它似乎可以回溯得多。 应该回溯多远?

1
组合逻辑项是否总是更大?
因此,存在一种使用SK组合器将lambda微积分项转换为组合逻辑的算法。它产生的东西会爆炸。我想进一步了解这种规模的爆炸。我似乎无法想到更好的算法。我听说功能语言实际上已经编译为组合器,因此似乎必须存在更好的算法。我查阅了大卫·特纳(David Turner)关于该主题的论文,他基本上只是说要应用一些优化,并且它们会带来“显着的改进”。 “显着改善”是否意味着大小下降到仅多项式增长?是否有一种已知的方法可以将lambda项转换为仅增加(或更少)多项式的组合逻辑?如果存在这样的算法是否可行?

1
您如何确定Welch-Berlekamp算法中的错误数量?
在用于解码Reed-Solomon码的Welch-Berlekamp算法中,给出了一个点列表,该点(一个一世,b一世)(ai,bi)(a_i, b_i)表示未知位置b i上有Ëee错误的消息(并且将e赋给该算法)。输出是通过所有给定点(发生错误的点除外)的多项式。b一世bib_iËee 该方法涉及求解形式为的线性方程组 b一世Ë(一个一世)= Q (a一世)biE(ai)=Q(ai)b_i E(a_i) = Q(a_i) 所有一世ii这里ËEE有度Ëee和问QQ具有至多度Ë + ke+ke+k。变量是ËEE和的系数问QQ。 为了确保ËEE具有度Ëee通常会在上述线性系统中加上的系数XËxex^e为1 的约束。但是,实际上并不一定知道Ëee。一个低效的(但仍多项式时间)的方式来解决这个问题是尝试Ëee所有值开始(n + k − 1 )/ 2 − 1(ñ+ķ-1个)/2-1个(n+k-1)/2 - 1,直到找到一个解下去。 我的问题是:确定方法是否更有效ËËe?或者,是否对线性系统进行了修改,以允许使用的上限ËËe而不是精确值? 特别是我想将此特定的解码器用于Reed-Solomon码,而不是基于其他技术的完全不同的算法。 为了回应DW的回答,这是我的工作示例。一切都以7为模。 plain message is: [2, 3, 2] polynomial is: 2 + 3 t^1 + 2 t^2 encoded message is: [[0, 2], [1, 0], …

2
在度量空间点集中找到小于
我在度量空间中定义了一组个点,因此我可以测量点之间的“距离”,而没有别的。我想在此集合中找到最中心的点,将其定义为与所有其他点的距离总和最小的点。度量计算很慢,因此需要尽可能避免。nnn 查找该点的明显方法是使用公制距离计算,因为它简单地(a)为每个点计算到所有其他点的距离之和,然后(b)取最小点。n2n2n^2 有没有办法在少于距离比较中做到这一点?(可能以某种方式利用三角不等式,这应该适用于我的指标。)O(n2)O(n2)O(n^2) 如果不存在确切的方法,则一个良好的近似值可能就足够了。

3
如何使用图论解决法国国家档案馆的编排问题?
晚上好!我实际上是在法国国家档案馆实习,遇到一种想用图形解决的情况... 一,尘土飞扬的情况 我们希望根据图书的高度优化图书馆图书的排列方式,以最大程度地减少归档成本。书的高度和厚度是已知的。我们已经按照高度升序排列了这些书(我不知道这是不是最好的东西,但是...就是这样做的方法)。了解了每本书的厚度后,我们可以为每个类确定其排列所需的厚度,将其称为(例如,高的书的总厚度)。H i L i H i = 23H1个,小时2,… ,HñH1,H2,…,HnH_1,H_2,\dots,H_nH一世HiH_i大号一世LiL_iL i = 300H一世= 23ç 米Hi=23cmH_i = 23\,\mathrm{cm}大号一世= 300ç 米Li=300cmL_i = 300\,\mathrm{cm} 图书馆可以定制制造货架,指示所需的长度和高度(深度没有问题)。高度和长度货架的成本为 ,其中是固定成本,是每长度单位的货架成本。x i F i + C i x i F i C iH一世HiH_iX一世xix_iF一世+ C一世X一世Fi+CixiF_i+C_ix_iF一世FiF_iC一世CiC_i 需要注意的是高度的货架可以用来存储高度的书籍 与。我们希望将成本降到最低。^ h Ĵ Ĵ ≤ 我H一世HiH_iHĴHjH_jĴ ≤ 我j≤ij\leq i 我的老师建议我将此问题建模为寻路问题。该模型可能涉及索引为到个顶点。我的导师建议我计算现有条件,每个边的含义以及如何计算与边相关的评估。其他解决方案和见解也可以。0 n v …


1
最重的平面子图
考虑以下问题。 给定:边缘上具有真实非负权重的完整图形。 任务:找到最大权重的平面子图。(在所有可能的平面子图中为“最大”。) 注意:最大权重子图将是一个三角剖分;如果完整图在个顶点上,则它将具有m = 3 n - 6个边。ññnm = 3 n − 6米=3ñ-6m=3n-6 问题:解决此问题的最佳算法是什么?它的时间复杂度是多少?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.