Questions tagged «algorithms»

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


1
贪婪算法何时可以解决硬币兑换问题?
给定一组具有不同面额和值v的硬币,您希望找到代表值v所需的最少数量的硬币。Ç 1 ,。。。,Ç ñc1,...,cnc1, ... , cn 例如,对于硬币集1,5,10,20,这给2和6的硬币和6和19的硬币。 我的主要问题是:何时可以使用贪婪策略解决此问题? 优点:这句话显然是不正确的吗?(摘自:如何分辨贪婪算法是否足以解决最小硬币找零问题?) 但是,本文证明,如果贪婪算法适用于第一个最大定理值和第二个最大定理值,那么它将适用于所有第一个定理值,并且建议仅使用贪婪算法与最佳DP算法进行检查。 http://www.cs.cornell.edu/~kozen/papers/change.pdf 附言 请注意,该线程中的答案令人难以置信-这就是为什么我再次提出这个问题。

3
检索动态图的最短路径
我目前正在研究有向图中的最短路径。有许多有效的算法可用于查找网络中的最短路径,例如dijkstra算法或bellman-ford算法。但是,如果图形是动态的,该怎么办?我说动态是指我们可以在程序执行期间插入或删除顶点。我正在尝试找到一种有效的算法,用于在插入边e之后更新从顶点到每个其他顶点u的最短路径,而无需在新图中再次运行最短路径算法。我怎样才能做到这一点?提前致谢。vvvüuuËee 注意:更改可以在算法的第一次迭代后完成 注[2]:两个节点中给出,源和Ť目标。我需要找到这些节点之间的最短路径。当图形更新时,我只需要更新π (s ,t ),这是s和t之间的最短路径。sssŤttπ(s ,t )π(s,t)\pi(s,t)sssŤtt 注意[3]:我只对边缘插入盒感兴趣。 正式定义:给定一个图。定义一个更新操作作为1)的边缘的插入ë到ë或2)的边缘的氨基酸缺失ë从ë。目的是有效地找到更新操作后所有对最短路径的成本。有效地,我们的意思至少比每次更新操作后执行All-Pairs-Shortest-Path算法(例如Bellman-Ford算法)更好。G = (V,E)G=(V,E)G = (V,E)ËeeËEEËeeËEE 编辑:下面是问题的简化版本: 给出了一个加权图,该图由单向边以及两个关键顶点s和t组成。还给出了候选双向边缘的集合C。我必须建立一个边缘(Û ,v )∈ Ç以最小化从距离小号到吨。ģ (V,E)G(V,E)G(V,E)sssŤttCCC(Û ,v )∈ Ç(u,v)∈C(u,v) \in CsssŤtt

1
排序为线性程序
数量惊人的问题使线性编程(LP)的问题自然减少。请参见[1]的第7章中的示例,例如网络流量,二分匹配,零和博弈,最短路径,线性回归形式甚至电路评估! 由于电路评估简化为线性规划,因此任何问题都必须具有线性规划公式。因此,通过简化为线性程序,我们有了一种“新”的排序算法。所以,我的问题是PPP 将对实数数组进行排序的线性程序是什么?nnn Reduce-to-LP-and-solve排序算法的运行时间是多少? 算法由S.达斯古普塔,C. PAPADIMITRIOU和U.瓦齐拉尼(2006)

2
用于“求和”一组和的高效算法
给定自然数X的多集,请考虑所有可能总和的集合: sums(X)={∑i∈Ai|A⊆X}sums(X)={∑i∈Ai|A⊆X}\textrm{sums}(X)= \left\{ \sum_{i \in A} i \,|\, A \subseteq X \right\} 例如,而 。sums({1,5})={0,1,5,6}sums({1,5})={0,1,5,6}\textrm{sums}(\left\{1,5\right\}) = \left\{0, 1, 5, 6\right\}sums({1,1})={0,1,2}sums({1,1})={0,1,2}\textrm{sums}(\left\{1,1\right\}) = \left\{0, 1, 2\right\} 计算逆运算最有效的算法是什么(以输入和的大小来衡量)?具体来说,可以有效地计算以下任何一项: 给定集是否为有效的和集。(例如,有效,而无效。){0,1,2}{0,1,2}\left\{0,1,2\right\}{0,1,3}{0,1,3}\left\{0,1,3\right\} 一个累加到给定集合的多重集。 在最小的多重集,总结到给定。(例如,和总和为但前者较小。){ 1 ,1 ,1 } { 0 ,1 ,2 ,3 }{1,2}{1,2}\left\{1,2\right\}{1,1,1}{1,1,1}\left\{1,1,1\right\}{0,1,2,3}{0,1,2,3}\left\{0,1,2,3\right\}

1
如何证明随机播放算法的正确性?
我有两种方法可以按随机顺序生成项目列表,并想确定它们是否同样公平(公正)。 我使用的第一种方法是构造元素的整个列表,然后对其进行随机播放(例如Fisher-Yates随机播放)。第二种方法更多是一种迭代方法,该方法使列表在每次插入时都保持乱序。在伪代码中,插入函数为: insert( list, item ) list.append( item ) swap( list.random_item, list.last_item ) 我对展示这种特殊混洗的公平性感兴趣。使用此算法的优点是足够的,即使稍微不公平也可以。要决定,我需要一种评估其公平性的方法。 我的第一个想法是,我需要以这种方式计算可能的总排列与一组最终长度可能的总排列。但是,我对如何计算该算法产生的排列有些困惑。我也不能确定这是最好的还是最简单的方法。

5
为什么身体素质低下的人有机会生存到下一代?
我目前正在阅读和观看遗传算法,并且发现它非常有趣(我上大学时没有机会学习它)。 我了解突变是基于概率的(随机性是进化的根源),但我不知道生存的原因。 据我了解,一个个体III具有适应性例如另一个个体具有适应性我们有,那么比具有更好的生存可能性到下一代。F(i)F(i)F(i)JJJF(j)F(j)F(j)F(i)>F(j)F(i)>F(j)F(i) > F(j)IIIJJJ 概率意味着可以生存而可能无法生存(“运气不好”)。我不明白为什么这很好?如果将始终在选择中幸免,那么算法中会出什么问题?我的猜测是该算法将类似于贪婪算法,但我不确定。JJJ III III

3
什么时候AKS素数测试实际上比其他测试快?
我试图了解我如何了解AKS素数测试,例如证明PRIMES⊆P的推论,或用于计算机素数测试的实际实用算法。 该测试具有多项式运行时,但具有高度和可能的高常数。那么,实际上,在哪一个nnn方面超过其他素性检验?在这里,nnn是质数的位数,“超越”是指典型计算机体系结构上测试的大概运行时间。 我对功能上可比的算法感兴趣,这是确定性的算法,不需要为正确性而猜测。 另外,考虑到测试的内存需求,在其他测试中使用这种测试是否可行?


2
如果我可以解决数独问题,可以解决旅行商问题(TSP)吗?如果是这样,怎么办?
我们说有一个程序,如果您提供任意大小的部分填充的数独,它会为您提供相应的完整数独。 您可以将此程序视为黑匣子,并用它来解决TSP吗?我的意思是,有一种方法可以将TSP问题表示为部分填充的Sudoku,以便如果我给您Sudoku的答案,您可以在多项式时间内告诉TSP解决方案? 如果是,怎么办?如何将TSP表示为部分填充的数独,并为结果解释相应的填充的数独。

1
服用mod的复杂性
这似乎是一个应该简单回答的问题,但我没有明确的答案: nnna,pa,pa, pamodpamodpa\bmod p 仅将除以将花费时间,其中是乘法的复杂度。但是可以更快地执行吗?aaappp O(M(n))O(M(n))O(M(n))M(n)M(n)M(n)modmod\bmod

1
区分决策程序vs SMT求解器vs定理证明器vs约束求解器
这些术语使我感到困惑。我认为 SAT求解器:确定命题逻辑的可满足性(使用DPLL或本地搜索)。 决策程序是确定某个可确定的一阶理论的可满足性的过程。 SMT求解器是SAT求解器+决策程序。 定理证明者表示类似动态逻辑的东西,例如KeY工具 约束求解器:我不知道。 但是我看到有人称Z3为定理证明者。因此,我不知道该如何区分这些术语。对所有这些人来说,最通用的术语是什么?谢谢。

2
为什么C ++向量中的push_back会被摊销?
我正在学习C ++,注意到向量的push_back函数的运行时间是恒定的“摊销”。该文档进一步指出:“如果发生重新分配,则重新分配本身在整个大小上都是线性的。” 这不应该意味着push_back函数是,其中是向量的长度吗?毕竟,我们对最坏情况分析感兴趣,对吧?O(n)O(n)O(n)nnn 我想至关重要的是,我不知道形容词“摊销”如何改变运行时间。

2
集体支付账单问题
一张桌子有个人。第个人必须支付美元。我p 我ñnn一世iip一世pip_i 有些人没有正确的账单来支付,因此他们提出了以下算法。p一世pip_i 首先,每个人都把一些钱放在桌子上。然后,每个人都收回他们多付的钱。 钞票有固定的面额集(不是输入的一部分)。 一个例子:假设有两个人,爱丽丝和鲍勃。爱丽丝欠5 美元,有5张1 美元的钞票。鲍勃欠2 美元,有一张5 美元的钞票。爱丽丝和鲍勃把所有的钱都放在桌子上之后,鲍勃收回了 3 美元,每个人都很高兴。 当然,有时候人们不必把所有的钱都放在桌子上。例如,如果爱丽丝有上千元的1 美元钞票,那么她就不必将它们全部放到桌子上,然后再将其中的大部分拿回来。 我想找到一种具有以下属性的算法: 输入指定人数,每个人欠多少钱以及每个人拥有多少种面额的钞票。 该算法告诉每个人第一轮要把哪些钞票放在桌子上。 该算法告诉每个人第二轮要从表中删除哪些账单。 放在桌子上的钞票数+从桌子上取出的钞票数被最小化。 如果没有可行的解决方案,该算法将返回错误。

1
拟阵和贪婪在算法设计中有多重要?
最初,引入拟阵来概括子集在某个地面集合的线性独立性的概念。包含此结构的某些问题允许贪婪算法找到最佳解决方案。后来引入了贪婪的概念来概括这种结构,以捕获更多的问题,以便通过贪婪的方法找到最佳的解决方案。EEEIII 这些结构在算法设计中多久出现一次? 此外,贪婪算法通常不能完全捕获找到最佳解的必要条件,但仍然可以找到非常好的近似解(例如Bin Packing)。鉴于此,有没有一种方法可以衡量问题与贪婪或类人动物有多“接近”?

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.