Questions tagged «algorithms»

算法是定义明确的问题解决方案的一系列明确定义的步骤。如果您的问题与算法的设计和分析有关,请使用此标签。

2
一个人如何有效地产生所有相等数量的0和1的二进制序列?
甲二进制序列长度的只是一个有序序列使得每个要么是或。为了生成所有这样的二进制序列,可以按以下方式使用明显的二进制树结构:根为“空”,但是每个左子级对应于现有字符串的附加值,每个右子级对应于。现在,每个二进制序列只是一条长度为的路径,该路径从根开始并在叶处终止。x 1,… ,x n x j 0 1 0 1 n + 1ññnX1个,… ,xñX1个,…,Xñx_1,\ldots,x_nXĴXĴx_j0001个1个10001个1个1n + 1ñ+1个n+1 这是我的问题: 如果我们只想生成所有长度二进制字符串,它们恰好具有零和,我们可以做得更好吗?n n2 n2ñ2nññnññn 所谓“我们可以做得更好”,是指我们应该比笨拙的算法具有更低的复杂度,后者首先在上面构建整个树,然后尝试找到具有相等数量“左”和“右”边的路径。

1
给定一个弦图
如果图没有诱导出长度为4或更大的循环,则它是弦的。甲集团树Ť的ģ是一个树,其中该树的顶点的最大小集团ģ。T中的边对应于最小分隔符。在弦图中,不同的集团树的数量可以是顶点数量的指数。GGG444ŤŤTGGGGGGŤŤT 的降低派系图表 是所有集团树的并集ģ。也就是说,它具有所有相同的顶点和所有可能的边。给定G的计算C r(G )的复杂度是多少?C[R(G )C[R(G)C_r(G)GGGC[R(G )C[R(G)C_r(G)GGG 我想我曾经看过一个演示文稿,声称可以在O (m + n )时间内计算而无需证明。这意味着它与计算G的集团树一样容易。是否有参考文献可以证实这一点,或者给出了较慢的算法来计算?C[R(G )C[R(G)C_r(G)O (m + n )Ø(米+ñ)O(m+n)GGG

1
Shift-解析解析-问题
我最近遇到了一篇描述标题中提到的解析技术的论文。不幸的是,上述论文中使用的术语超出了我的理解范围,因此我一直在尝试更直观地理解构造算法。我相信我成功了(本次演讲是啊哈时刻的源头),但是不胜感激的是,无论是熟悉该技术还是其中所包含的术语的人,都可以对其进行验证。 我将描述我对解决方案的看法(如果正确的话,我相信它可能会对尝试理解该技术的其他人有所帮助),然后再提出其他问题。为了确保有没有误会,我将使用下列标准符号:,甲,乙,Ç ,。。。∈ Ñ,。。。X ,ÿ ,ž ∈ Ñ ∪ Ť,α ,βa,b,c,...∈Ta,b,c,...∈Ta, b, c, ... \in TA,B,C,...∈NA,B,C,...∈NA, B, C, ... \in N...X,Y,Z∈N∪T...X,Y,Z∈N∪T... X, Y, Z \in N \cup T和,如在造纸,甲我 →交通 ω表示规则号我。但是,对于概念,我可能会使用与原始论文不同的名称。α,β,γ,...∈{N∪T}∗α,β,γ,...∈{N∪T}∗\alpha, \beta, \gamma, ... \in \{N \cup T\}^*A→iωA→iωA \xrightarrow{i} \omegaiii 此外,在整个说明书中,等价关系被使用。κ0κ0\kappa_0 施工 解析自动机内部有两种类型的项目:形式的简单LR(0)项目(我称之为移位项目) 和A i → α ∙ β ,m ,n形式的我称为解决项目项目 …

4
求出GCD = 1的最小子集的大小
这是2012年波兰大学生程序设计比赛的练习部分出现的问题。尽管我可以找到主要比赛的解决方案,但似乎在任何地方都找不到该问题的解决方案。 的问题是:给定一组的ñNN不同的正整数不大于10910910^9中,找到大小米mm具有1以外没有公约数的最小子集的ñNN为至多500,并且可以假设的溶液存在。 米≤ 9m≤9m \le 9小号SS| 小号| =10|S|=10|S|=10小号SS1 &lt; 克1个&lt; g2&lt; 。。。&lt; g101&lt;g1&lt;g2&lt;...&lt;g101 < g_1 < g_2 < ... < g_{10}i ≠ j S g 2 g 3。。。g 10 g 2 g 3。。。克10 ≥ 3 × 5 × 7 × 11 × 。。。× 29 = 3234846615 &gt; 10 9GCD (克一世,g …


1
几天的分配问题
我有一个可以简化为分配问题的问题。(在上一个问题中,我发现了该怎么做的。) 这意味着我们有一组代理和一套的任务以及成本函数。我们需要找到一个任务,以使总成本最小。一个一个AŤŤTc (i ,j )C(一世,Ĵ)c(i,j) 在匈牙利算法可以找到至少一个最优解。对我来说听起来不错。Ø (ñ4)Ø(ñ4)O(n^4) 我的新问题是:有给定的天数。我必须每天解决分配问题,以便每个任务每天都完成,并且没有座席两次执行同​​一任务。 我尝试过的操作:我们可以每天分别运行匈牙利算法,并根据前一天的结果限制可能的组合数量。但这会使我们在以后的某些日子陷入困境,在最有可能找不到可行的解决方案的地方。 另一个想法是以某种方式集成本地搜索以更改前一天做出的决定。但是我认为我们不能依靠这一点。 我要面对的问题实例将在附近。成本矩阵将具有许多相同的值(例如,大多数为1或无穷大,只有大约2或3)。因此,在匈牙利算法期间,有很大的空间可以在一天内创建不同的最佳解决方案。| A | = | Ť| =500|一个|=|Ť|=500|A| = |T| = 500C(i ,j )C(一世,Ĵ)C(i,j) 我很高兴听到一些想法或建议如何为该问题找到一个好的解决方案。提前致谢。

2
快速k不匹配字符串匹配算法
我正在寻找一种快速的k不匹配字符串匹配算法。给定长度为m的模式字符串P和长度为n的文本字符串T,我需要一种快速(线性时间)算法来查找P匹配T的子字符串(最多不匹配k个)的所有位置。这与k差问题(编辑距离)不同。不匹配意味着子字符串和模式在最多k个位置具有不同的字母。我真的只需要k = 1(最多1个不匹配),因此针对k = 1的特定情况的快速算法也足够了。字母的大小为26(不区分大小写的英文文本),因此空间要求不应随字母的大小而增长太快(例如,我相信FAAST算法占用的字母空间大小是指数的,因此仅适用于蛋白质和基因序列)。 在最坏的情况下,基于动态编程的方法将趋于O(mn),这将太慢。我相信对此有Boyer-Moore算法的修改,但是我无法获得此类论文。我没有订阅访问学术期刊或出版物的权限,因此任何参考文献都必须在公共领域。 我将不胜感激任何指针,或指向免费文档的引用,或针对此问题的算法本身。

1
用于编辑距离计算的微优化:有效吗?
在Wikipedia上,给出了自下而上的用于编辑距离的动态编程方案的实现。它没有完全遵循定义。内部单元的计算如下: if s[i] = t[j] then d[i, j] := d[i-1, j-1] // no operation required else d[i, j] := minimum ( d[i-1, j] + 1, // a deletion d[i, j-1] + 1, // an insertion d[i-1, j-1] + 1 // a substitution ) } 如您所见,如果存在匹配项,该算法始终从左上角的邻居中选择值,从而节省了一些内存访问,ALU操作和比较。 但是,删除(或插入)可能会导致较小的值,因此该算法在局部上是不正确的,即,它违反了最佳标准。但是也许错误不会改变最终结果-可能会消除它。 这种微优化有效吗?为什么不呢?

2
确定时间和空间中的特定数字(最坏的情况)
\newcommand\ldotd{\mathinner{..}}假定A[1..n]A[1..n]A[1\ldotd n]是整数,则对于所有1 \ le k \ le n均为0 \ le A [k] \ le m,并且每个出现除A [1 \ l点缀n]中的特定数字以外的数字是奇数。尝试查找出现为偶数的数字。0≤A[k]≤m0≤A[k]≤m0\le A[k]\le m1≤k≤n1≤k≤n1\le k\le nA[1..n]A[1..n]A[1\ldotd n] 有一个Θ(nlogn)Θ(nlog⁡n)\Theta(n\log n)算法:我们将A [1 \ ldotd n]排序A[1..n]A[1..n]A[1\ldotd n]为B[1..n]B[1..n]B[1\ldotd n],然后将B[1..n]B[1..n]B[1\ldotd n]分解成许多块,其元素值为相同,因此我们可以计算每个元素的出现。 我想找到最坏的情况O(n)O(n)O(n) -时间和O(n)O(n)O(n) -空间算法。 假设m=Ω(n1+ϵ)m=Ω(n1+ϵ)m=\Omega(n^{1+\epsilon})和ϵ&gt;0ϵ&gt;0\epsilon>0,那么基数排序是不可接受的。 \DeclareMathOperator{\xor}{xor} 二进制按位运算是可接受的,例如A[1]xorA[2]A[1]xor⁡A[2]A[1]\xor A[2]。

1
确定给定字符串与字符串集合的相似程度
我不确定这个问题是否属于这里,如果没有,我深表歉意。我要做的是开发一种编程方式,通过该方式我可以概率确定给定的字符串是否“属于”一袋字符串。例如,如果我有10,000个美国城市名称,然后有字符串“费城”,我想根据我已经知道的美国城市名称,用某种定量方法来衡量“费城”是美国城市名称的可能性。虽然我知道在这种情况下我无法将真实的城市名称与假的城市名称区分开,但我至少会希望排除诸如“ 123.75”和“快速的红狐狸跳过懒惰的棕色狗”之类的字符串一些门槛。 首先,我研究了Levenshtein距离,并探讨了如何将其应用于至少与我要解决的问题类似的问题。我发现的一个有趣的应用是窃检测,其中一篇论文描述了如何使用Levenshtein距离和改进的Smith-Waterman算法对纸张进行打分,并根据它们是给定原纸的抄袭版本的可能性进行评分。我的问题是,是否有人可以用其他可能对我有帮助的既定算法或方法为我指明正确的方向。我感觉这可能是过去有人试图解决的问题,但到目前为止,我的Google-fu无法使我成功。

2
如何测试多边形相对于线是否为单调?
众所周知,单调多边形在多边形三角剖分中起着至关重要的作用。 定义:多边形的平面被称为相对于直线单调,如果每线正交相交最多两次。大号大号PPPPLLLLLLPPP 给定直线和多边形,是否有一种有效的算法来确定多边形相对于是否为单调?P P LLLLPPPPPPLLL

1
如何为Appel的隐藏线去除算法找到轮廓线
为了好玩,我尝试为DCPU-16制作线框查看器。我了解如何做所有事情,除了如何隐藏线框中隐藏的线。因此,这里所有的问题都假设您可以使用OpenGL,但是不幸的是,我无法使用DCPU-16之类的东西(或任何类型的硬件加速)。 我在Google图书上找到了关于Appel算法的相当不错的描述。但是,有一个问题我很难弄清楚。 Appel将轮廓线定义为由正面和背面多边形共享的边,或不是封闭多面体一部分的正面多边形的未共享边。由两个正面多边形共享的边不会改变可见性,因此不是轮廓线。在图8.4中,边缘AB,EF,PC,GK和CH是轮廓线,而边缘ED,DC和GI不是轮廓线。 我了解算法的规则及其轮廓线后的工作方式,但是我不知道我该怎么做才能确定一条边是否被正面和背面多边形共享,或者从编码的角度来看,它不是封闭多面体的一部分的正面多边形的未共享边。我可以看一下形状,也可以知道脑海中的轮廓线是什么,但是我不知道如何将“理解”转换为编码算法。 更新资料 我在确定轮廓线方面取得了一些进展。我从布法罗大学计算机图形学课上找到了这 两个讲义。 考虑边缘。这些分为三类。 连接两个不可见面的边本身就是不可见的。这将从列表中删除并忽略。 连接两个潜在可见面的边缘称为“材料边缘”,需要进一步处理。 连接潜在可见面和不可见面的边缘是“材料边缘”的特殊情况,也称为“轮廓边缘”。 使用以上两条信息,我可以更接近将其编写为代码,但是还有很长的路要走。

1
使用对抗参数找到第k个最小元素的下界
在许多文本中,使用中位数的自变量得出了找到第个最小元素的下限。如何使用敌对参数找到一个?kkk 维基百科说锦标赛算法运行在,并且被给定为下限。O(n+klogn)O(n+klog⁡n)O(n+k\log n)n−k+∑nj=n+2−k⌈lgj⌉n−k+∑j=n+2−kn⌈lgj⌉n - k + \sum_{j = n+2-k}^{n} \lceil{\operatorname{lg}\, j}\rceil

1
在约束编程中,是否有任何模型将变量更改的数量考虑在内?
考虑一个CSP模型,其中更改特定变量的值非常昂贵。在搜索过程中,目标函数是否还考虑变量值的变化次数? 一个示例:昂贵的更改变量可能在某些其他代理程序的控制下,并且涉及使该代理程序更改变量会产生一些开销。另一个示例:变量参与其中一个约束,并且满足此约束包括调用昂贵的函数(例如模拟器),例如是约束,而是昂贵的-计算功能。因此,和是变化昂贵的变量。z=f(x,y)z=f(x,y)z = f(x, y)fffxxxyyy

2
对元素进行排序,以使某些元素不会介于其他元素之间
给定一个整数和一组不同的整数的三元组 找到一种算法,该算法可以找到集合的置换,使得 或正确确定不存在这种排列。非正式地,我们想对数字1到重新排序;每个三元组在表示必须之前出现在新的顺序,但不能之间出现nnnS⊆{(i,j,k)∣1≤i,j,k≤n,i≠j,j≠k,i≠k},S⊆{(i,j,k)∣1≤i,j,k≤n,i≠j,j≠k,i≠k},S \subseteq \{(i, j, k) \mid 1\le i,j,k \le n, i \neq j, j \neq k, i \neq k\},ππ\pi{1,2,…,n}{1,2,…,n}\{1, 2, \dots, n\}(i,j,k)∈S⟹(π(j)&lt;π(i)&lt;π(k)) ∨ (π(i)&lt;π(k)&lt;π(j))(i,j,k)∈S⟹(π(j)&lt;π(i)&lt;π(k)) ∨ (π(i)&lt;π(k)&lt;π(j))(i,j,k) \in S \implies (\pi(j)<\pi(i)<\pi(k)) ~\lor~ (\pi(i)<\pi(k)<\pi(j))nnn(i,j,k)(i,j,k)(i,j,k)SSSiiikkkjjjiii和。kkk 例子1 假设且。然后n=5n=5n=5S={(1,2,3),(2,3,4)}S={(1,2,3),(2,3,4)}S = \{(1,2,3), (2,3,4)\} π=(5,4,3,2,1)π=(5,4,3,2,1)\pi = (5, 4, 3, 2, 1)是不有效的置换,由于,但。(1,2,3)∈S(1,2,3)∈S(1, 2, 3)\in Sπ(1)&gt;π(3)π(1)&gt;π(3)\pi(1) > …

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.