Questions tagged «algorithms»

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

2
寻找最大程度地躺在球上的球的复杂性
给定一组点和半径。在距离小于的地方找到数量更多的点的复杂性。例如最大化?x1,…,xn∈R2x1,…,xn∈R2x_1, \ldots, x_n \in \mathbb{R}^2rrrrrr∑ni=11∥x−xi∥≤r∑i=1n1‖x−xi‖≤r\sum_{i=1}^n \mathbb{1}_{\|x - x_i\| \leq r} 蛮力算法将遍历每个点并计算距离小于r的点的数量rrr。这将导致\ mathcal {O}(n ^ 2)的复杂性O(n2)O(n2)\mathcal{O}(n^2)。 有没有更好的方法?


2
这个组合优化问题是否与任何已知问题相似?
问题如下: 我们有一个二维的数字数组/网格,每个数字代表某种“收益”或“利润”。我们也有两个固定整数和(分别表示“宽度”和“高度”。)和一个固定整数。wwwhhhnnn 现在,我们希望在网格上覆盖尺寸为矩形,以使这些矩形中的单元格值的总和最大化。nnnw×hw×hw \times h 下图是一个二维网格的示例,上面覆盖了两个这样的矩形(图片未展示最佳解决方案,只是其中和一种可能的覆盖)w=h=2w=h=2w = h = 2n=2n=2n = 2 矩形不能相交(否则,我们只需要找到一个矩形的最佳位置,然后将所有矩形放在该位置即可。) 在上面的示例中,单元格中值的总和为−2+4.2+2.4+3.14+2.3−1.4+1−3.1−2+4.2+2.4+3.14+2.3−1.4+1−3.1-2 + 4.2 + 2.4 + 3.14 + 2.3 -1.4 + 1 - 3.1 这是否类似于组合优化中的任何已知问题?这样我就可以开始阅读并尝试找到解决方法。 那些感兴趣的人还有更多背景知识: 到目前为止,我仅有的想法是贪婪算法(它将找到第一个矩形的最佳位置,然后找到第二个矩形的不重叠位置等)或某种元启发式方法,例如遗传算法。 实际上,我希望使用具有大约一百万个单元和数万(甚至数十万)个矩形的网格来解决此问题,尽管没有必要在短时间内解决它(即对于该算法需要花费数小时甚至数天的时间。)我不希望找到确切的解决方案,但是我想得到一个在这些限制条件下尽可能好的解决方案。 干杯!


4
从不同的棍子上砍下相等的棍子
您有个任意长度的棍子,不一定是整数。ññn 通过切割一些木棍(一次切割可切割一根木棍,但我们可以根据需要进行多次切割),您希望得到木棍,使得:k &lt; nķ&lt;ñk<n 所有这些棒的长度相同;ķķk 所有的至少与其他所有条一样长。ķķk 请注意,执行切割后,我们获得了。Çn + Cñ+Cn + CCCC 您将使用哪种算法以使必要切割的次数最少?那是什么号码? 例如,取和任何。可以使用以下算法:Ñ ≥ 2k = 2ķ=2k=2Ñ ≥ 2ñ≥2n\geq 2 按长度的降序对摇杆进行排序,以使。大号1个≥ 大号2≥ ... ≥ 大号ñ大号1个≥大号2≥…≥大号ñL_1\geq L_2 \geq \ldots \geq L_n 如果则将木棒#1切成两等份。现在有两个长度为棒,其长度至少等于其余的棒。大号1 / 2 2 ... Ñ大号1个≥ 2 大号2大号1个≥2大号2L_1\geq 2 L_2大号1个/ 2大号1个/2L_1 / 22 … n2…ñ2 \ldots n 否则(),将木棒#1切成两个不等长的和。现在有两个长度为棒,长度大于,其他两个棒为。L 2 L …

1
查找最长斐波那契子串的幼稚算法的复杂性
给定两个符号和b,我们如下定义第k个斐波那契字符串:一个a\text{a}bb\text{b}ķkk F(k )= ⎧⎩⎨b一个F(ķ - 1 )⋆ ˚F(k − 2 )如果 k=0如果 k=1其他F(k)={bif k=0aif k=1F(k−1)⋆F(k−2)else F(k) = \begin{cases} \text{b} &\mbox{if } k = 0 \\ \text{a} &\mbox{if } k = 1 \\ F(k-1) \star F(k-2) &\mbox{else} \end{cases} 与表示字符串连接。⋆⋆\star 因此,我们将拥有: F(0 )= bF(0)=bF(0) = \text{b} F(1 )= 一个F(1)=aF(1) = \text{a} F(2 …

2
等价关系覆盖问题(在图论中)
有限顶点集上的等价关系可以由无向图表示,该无向图是团体的不相交的并集。顶点集表示元素,边表示两个元素是等效的。 如果我有一个图形和图表g ^ 1,... ,g ^ ķ,我们说摹被覆盖摹1,... ,g ^ ķ如果设定的边缘摹等于套边的工会摹1,… ,G k。G 1,... ,G k的边集不需要是不相交的。请注意,任何无向图GGGGG1个,… ,GķG1个,…,GķG_1,\dots,G_kGGGG1个,… ,GķG1个,…,GķG_1,\dots,G_kGGGG1个,… ,GķG1个,…,GķG_1,\dots,G_kG1个,… ,GķG1个,…,GķG_1,\dots,G_kGGG 可以由有限数量的等价关系覆盖(即,团簇图的不交集并集)。 我有几个问题: 关于覆盖图所需的最小等价关系数,该怎么说呢?GGG 我们如何计算这个最小数字? 我们如何计算G的明确最小覆盖率GGG,即一组大小最小且覆盖的等价关系?GGG 除了分区逻辑(子集逻辑的对偶)之外,这个问题是否还有其他应用? 这个问题的名称是否成立? 鉴于评论中指出的各种误解,以下是一些图片来说明这些概念。如果您有一个更易于理解的术语的想法(而不是“覆盖”,“等价关系”,“团体的不相交并集”和“不一定相交”边集并集),请随时告诉我。 这是一张图的图片及其一个等价关系: 这是一张图形的图片以及覆盖它的两个等价关系: 很明显,至少需要两个等价关系。 这是一张图形的图片以及覆盖其中的三个等价关系: 不太明显至少需要三个等价关系。子集逻辑对偶的引理1.9 可用于证明这是正确的。将这个引理推广到具有两个以上输入的nand运算是此问题的动机。

3
为什么用米勒-拉宾代替费马素数检验?
从Miller-Rabin证明中,如果一个数字通过了Fermat素数检验,则它还必须通过具有相同底数(证明中的变量)的Miller-Rabin检验。而且计算复杂度是相同的。aaa 以下是来自Fermat素数测试的信息: 尽管Carmichael数比素数少得多,但其中1足够多,因此上述形式中经常不使用Fermat的素数检验。取而代之的是,更常使用Fermat测试的其他更强大的扩展,例如Baillie-PSW,Miller-Rabin和Solovay-Strassen。 米勒-拉宾(Miller-Rabin)有什么好处,为什么据说它比费马素数检验更强大?

1
线性规划的强对偶定理的简短证明
考虑线性程序 Primal:Ax⃗ ≤b⃗ maxc⃗ Tx⃗ Primal:Ax→≤b→maxc→Tx→\begin{array}{|ccc|} \hline Primal: & A\vec{x} \leq \vec{b} \hspace{.5cm} & \max \vec{c}^T\vec{x} \\ \hline \end{array} Dual:c⃗ ≤y⃗ TAminy⃗ Tb⃗ Dual:c→≤y→TAminy→Tb→\begin{array}{|ccc|} \hline Dual: & \vec{c} \leq \vec{y}^TA \hspace{.5cm} & \min \vec{y}^T\vec{b} \\ \hline \end{array} 弱对偶定理指出,如果x⃗ x→\vec{x}和y⃗ y→\vec{y}满足约束,则 c⃗ Tx⃗ ≤y⃗ Tb⃗ c→Tx→≤y→Tb→\vec{c}^T\vec{x} \leq \vec{y}^T\vec{b}。它具有使用线性代数的简短证明: c⃗ Tx⃗ ≤y⃗ …

3
接线长度最小化
我的问题是这样的: 我有一个物理布局,以图形表示。节点表示导线可以锚固的钩子/管道,而“边缘”是导线可以通过的两个节点之间的可能连接。 有一些特殊的节点,称为分离器,从中可以将单根导线拆分为2根或更多至k根。目前可以将k取为常数,但是每个节点的k都不同。并非所有节点都是拆分器。 有一种电源可以从中伸出电线。它是源。电线必须连接到n个接收器。 一条边可以沿任意方向穿过任意数量的导线。 总导线长度必须最小化。 图形,平面或欧几里得的性质未知。 示例:下面是一个示例网络。节点以数字命名,并且边的权重等于1。源是Node1,接收器是Node5,Node9和Node13。在情况1中,Node6是Splitter节点。在情况2中,Node6和Node4是拆分器节点。分离器节点的k = 3,即,它可以接一根线并将其分成三根线。 案例1。仅一个拆分器节点。在Node6上拆分很有意义。 情况2。两个分离器节点。在Node4而不是Node6上拆分很有意义。 我正在寻找不同的策略来找到针对此问题的通用解决方案。与手头的问题相比,此处呈现的图的比例较小。该图是静态的,不能更改(我的意思是解决方案不应建议任何新的边缘或建议新的拆分器位置)。也欢迎任何引用有关此类问题的研究论文的参考。 案例3。两个分离器节点。在Node4和Node14处拆分很有意义。请注意,这种情况下边缘8-12、6-10和10-11的边缘权重已更改。在这种情况下,重要的是从Node14分离后重新布线。


4
在任何实际输入中,低阶项主导运行时间的算法示例?
大O表示法隐藏了常数因子,因此存在一些算法,这些算法对于任何合理的输入大小都不可行,因为项的系数非常大。O(n)Ø(ñ)O(n)nñn 是否存在任何已知的算法,其运行时间为但具有一些低阶项,其数量如此之大,以至于在合理的输入大小下,它完全主导了运行时间?我想在算法课程中使用像这样的算法作为示例,因为它提供了为什么不能使用big-O表示法的充分理由。O(f(n))Ø(F(ñ))O(f(n))o(f(n))Ø(F(ñ))o(f(n)) 谢谢!

3
测试n个项目时,如何用尽可能少的s-子集覆盖所有t-子集?
此问题源于软件测试。这个问题有点难以解释。我将首先给出一个示例,然后尝试概括该问题。 共有10个要测试的项目,例如A到J,以及一个可以同时测试3个项目的测试工具。测试工具中项目的顺序无关紧要。当然,要进行详尽的测试,我们需要10 C 3的项目组合。10C310C3^{10}C_{3} 问题比较复杂。还有一个附加条件是,一旦一对项目一起测试过,就不需要再对同一对进行测试。 例如,一旦我们执行以下三个测试: 美国广播公司 ADE BDF 我们不必执行: ABD 因为第一个测试用例覆盖了A,B对,第二个覆盖了A,D,第三个覆盖了B,D。 因此,问题在于,我们需要确保所有对都经过测试的最小测试用例数量是多少? 概括地说,如果我们有n个项目,则可以同时测试s,并且我们需要确保测试所有可能的t元组(使得s&gt; t),我们需要的最小测试用例数是多少? n,s和t的项? 最后,什么是生成所需测试用例的良好算法?


1
令人烦恼的问题
Pebbling是在无向图上玩的纸牌游戏,其中每个顶点都有零个或多个小卵石。一个简单的磨合动作包括从顶点移除两个小卵石并将一个小卵石添加到的任意邻居。(显然,顶点v在移动之前必须至少有两个卵石。)PebbleDestruction问题询问,给定图形和每个顶点的卵石计数,是否存在序列除去除了一个小卵石以外的所有卵石运动。证明PebbleDestruction是NP完整的。GGGvvvvvvG=(V;E)G=(V;E)G = ( V; E )p(v)p(v)p ( v )vvv 首先,我证明它在NP中,因为我可以在多项式时间内验证解,从一个卵石中追溯卵石计数。 接下来,关于将哪些问题用作多项式时间约简的基础,有哪些想法? 顶点覆盖之类的东西会起作用吗?还是不同大小的顶点覆盖? 如果是这样,它如何处理每次移动中变化数量的卵石? 谢谢。 来自:http : //courses.engr.illinois.edu/cs473/sp2011/hw/disc/disc_14.pdf

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.