Questions tagged «efficiency»

解决问题时,尽可能少地使用资源(例如时间,空间)。如果您的问题专门与资源使用有关,而不是碰巧提到运行时间的通用算法问题,请使用此标记。


2
感觉指数级但为P的问题
我正在尝试建立一个“异常有用”的算法/问题列表,例如,解决“似乎”本质上非常指数化的问题,但是有一些最终可以解决这些问题的特别聪明的算法。我的意思示例: 线性编程(单纯形算法是指数时间;找到多项式时间解花了很长时间!) 更一般而言,半定规划 原始性测试 2-SAT和HORNSAT 计算行列式(如果这听起来并不困难,请考虑永久变量) 寻找完美的搭配 使用有限简单组的分类可以解决各种硬组理论问题 可以使用复杂的禁止次要特征(可嵌入性在任意表面上;树宽和分支宽度的边界; Delta-Wye可约化图)来解决各种硬图问题 计算有界组中的指数(即以步骤计算,通过重复平方来完成)abmodkabmodka^b \mod klogblog⁡b\log b 计算依赖于LLL算法。(作为特殊情况:Euclidean算法。作为更一般的情况:PSLQ或HJLS算法。) 没有泰勒术语(?)的约束问题。我承认我还没有完全理解这一点,但是听起来它可能包含了上面的2-SAT / HORNSAT情况以及有限域上的任何线性代数。在这里看到更长的帖子 可通过全息缩小计算的问题。 值得一提的是,我还要提到图同构,因为它仍然非常简单(),它等效于许多其他同构问题:nlog2nnlog2⁡nn^{\log^2 n} 有向图/多重图/超级图(一种“较难”的问题) 有限自动机/ CFG 显然,这些方面存在一定的困难,但是所有人都会给至少某些人带来某种“惊奇”的感觉,因为这个问题听起来很困难,但事实证明这很容易解决。LP听起来可能相对简单,但是人们花了相当长的时间来建立一个实际的解决方案。反复平方或求解2-SAT是大学生可能会自己想到的事情,但是如果您只看过NP-Complete问题而没有看过HORNSAT,则听起来像是NP-Completeness的自然人选。解决CFSG或采用多项式方法来检查Delta-Wye可还原性并不是一件容易的事。 我希望这是有道理的; 这里显然有很多主观属性,但是我很想知道其他人发现什么是解决“显然很困难”问题的有效解决方案。

2
是否可以有效确定所有无上下文和常规语言?
我碰到了该图,该图表明无上下文和常规语言是有效问题(假设为)的(适当)子集。我完全理解有效的问题是所有可确定问题的子集,因为我们可以解决它们,但可能需要很长时间。PP\mathrm{P} 为什么所有无上下文和常规语言都可以有效地确定?这是否意味着解决它们将不会花费很长的时间(我的意思是我们无需更多上下文即可知道)?



1
推断优化类型
在工作中,我的任务是推断一些有关动态语言的类型信息。我将语句序列重写为嵌套let表达式,如下所示: return x; Z => x var x; Z => let x = undefined in Z x = y; Z => let x = y in Z if x then T else F; Z => if x then { T; Z } else { F; Z } 由于我从一般类型信息开始,并试图推断出更具体的类型,因此自然的选择是精简类型。例如,条件运算符返回其真假分支类型的并集。在简单的情况下,它效果很好。 但是,在尝试推断以下类型时遇到了障碍: function …
11 programming-languages  logic  type-theory  type-inference  machine-learning  data-mining  clustering  order-theory  reference-request  information-theory  entropy  algorithms  algorithm-analysis  space-complexity  lower-bounds  formal-languages  computability  formal-grammars  context-free  parsing  complexity-theory  time-complexity  terminology  turing-machines  nondeterminism  programming-languages  semantics  operational-semantics  complexity-theory  time-complexity  complexity-theory  reference-request  turing-machines  machine-models  simulation  graphs  probability-theory  data-structures  terminology  distributed-systems  hash-tables  history  terminology  programming-languages  meta-programming  terminology  formal-grammars  compilers  algorithms  search-algorithms  formal-languages  regular-languages  complexity-theory  satisfiability  sat-solvers  factoring  algorithms  randomized-algorithms  streaming-algorithm  in-place  algorithms  numerical-analysis  regular-languages  automata  finite-automata  regular-expressions  algorithms  data-structures  efficiency  coding-theory  algorithms  graph-theory  reference-request  education  books  formal-languages  context-free  proof-techniques  algorithms  graph-theory  greedy-algorithms  matroids  complexity-theory  graph-theory  np-complete  intuition  complexity-theory  np-complete  traveling-salesman  algorithms  graphs  probabilistic-algorithms  weighted-graphs  data-structures  time-complexity  priority-queues  computability  turing-machines  automata  pushdown-automata  algorithms  graphs  binary-trees  algorithms  algorithm-analysis  spanning-trees  terminology  asymptotics  landau-notation  algorithms  graph-theory  network-flow  terminology  computability  undecidability  rice-theorem  algorithms  data-structures  computational-geometry 

2
具有大量子问题的动态编程
具有大量子问题的动态编程。因此,我正在尝试通过Interview Street解决此问题: 网格漫游(得分50分) 您位于维网格中,位置为。网格的尺寸为)。一步,您可以在维度中的任何一个维度上向前或向后走一步。(因此,总是有可能的不同动作)。您可以采用多少种方法采取步骤,以使您在任何时候都不会离开网格?如果有任何,则离开网格,或。(X 1,X 2,... ,X Ñ)(d 1,d 2,... ,d Ñ Ñ 2 Ñ 中号X 我X 我 ≤ 0 X 我 > d 我NNN(x1,x2,…,xN)(x1,x2,…,xN)(x_1,x_2,\dots,x_N)(D1,D2,…,DN(D1,D2,…,DN(D_1,D_2,\dots,D_NNNN2N2N2NMMMxixix_ixi≤0xi≤0x_i \leq 0xi>Dixi>Dix_i > D_i 我的第一个尝试是这个记住的递归解决方案: def number_of_ways(steps, starting_point): global n, dimensions, mem #print steps, starting_point if (steps, tuple(starting_point)) in mem: return mem[(steps, tuple(starting_point))] val = …

3
有效计算的概念
如果多项式时间Turing机器算法的运行时间在最坏的情况下受输入大小中的多项式函数的限制,则认为该算法是有效的。我知道强力的“ Turing-Turing”论点: 可以在图灵机上有效模拟任何合理的计算模型 但是,我不了解用于分析微积分算法的计算复杂性的扎实理论。λλ\lambda 对于每个已知的计算模型,我们是否都有计算效率的概念?是否有仅对可计算性问题有用但对计算复杂性问题无用的模型?

3
什么数据结构可以有效地存储整数范围?
我需要保留一个范围在0到65535之间的整数的集合,以便可以快速执行以下操作: 插入一个新的整数 插入一系列连续的整数 删除整数 删除整数以下的所有整数 测试是否存在整数 我的数据具有以下特性:它通常在集合中包含整数整数。例如,集合在某个时间点可能是: { 121, 122, 123, 124, 3201, 3202, 5897, 8912, 8913, 8914, 18823, 18824, 40891 } 最简单的方法就是使用像C ++ std :: set这样的平衡二叉树,但是,使用它,我没有利用我经常会有大量数字的事实。也许最好存储一系列范围?但这意味着,如果要删除范围中间的整数,则需要将其分解;如果要填充两个范围之间的空格,则必须将其合并在一起。 是否存在任何适合此问题的现有数据结构?

4
尽快找到五个小整数中的最大两个
我在小型嵌入式系统上对图像数据使用5交叉中值滤波器,即 x x x x x 该算法非常简单:读取5个无符号整数值,获得最大的2个值,对这些值进行一些计算,然后写回无符号整数结果。 好的是5个整数输入值都在0-20的范围内。计算出的整数值也在0-20范围内! 通过分析,我发现获得最大的两个数字是瓶颈,因此我想加快这一步。什么是执行此选择最快的方法? 当前算法使用由5个数字指定的位置中的1位的32位掩码和HW支持的CLZ函数。 我应该说CPU是专有的,在我公司之外无法使用。我的编译器是GCC,但为此CPU量身定制。 我试图弄清楚是否可以使用查找表,但未能生成可以使用的密钥。 我有输入组合,但顺序并不重要,即与相同。21521521^5[5,0,0,0,5][5,5,0,0,0] 碰巧下面的哈希函数会产生完美的哈希而不会发生冲突! def hash(x): h = 0 for i in x: h = 33*h+i return h 但是散列是巨大的,并且根本没有足够的内存来使用它。 我可以使用更好的算法吗?是否可以使用查找表并生成密钥来解决我的问题?

1
给定n个字符串,其中一个是另一个的子字符串吗?
假设我们得到了字符串的集合。我想知道这些字符串中的任何一个是否是集合中任何其他字符串的子字符串。换句话说,我想要一种用于以下任务的算法:ññn小号1个,… ,Sñ小号1个,…,小号ñS_1,\dots,S_n 输入:小号1个,… ,Sñ小号1个,…,小号ñS_1,\dots,S_n 输出:使得是和的子字符串,或者如果不存在这样的则为None我,Ĵ一世,Ĵi,j小号一世小号一世S_i小号Ĵ小号ĴS_ji ≠ j一世≠Ĵi\ne j我,Ĵ一世,Ĵi,j 是否有一种有效的算法? 如果将“子字符串”替换为“前缀”,则存在一种有效的算法(对字符串进行排序,然后进行线性扫描以比较相邻的字符串;排序将确保子字符串相邻)。但是测试任何字符串是否为其他字符串的子字符串似乎更具挑战性。一个朴素的算法是遍历所有对,但这需要子字符串测试。有没有更有效的算法?我,Ĵ一世,Ĵi,jΘ (n2)Θ(ñ2)\Theta(n^2) 我猜我们可以称其为“所有对子字符串测试”或类似的名称。 我的最终目标是修剪集合,以便通过删除集合中其他子字符串的每个子字符串,使任何字符串都不是其他子字符串。

2
寻找具有较小内存占用的固定实现
我正在寻找设置数据类型的实现。也就是说,我们必须 维持一个动态子集(的大小从宇宙)U = \ {0,1,2,3,\点中,u - 1 \}大小的ü与Ñ Ù = { 0 ,1 ,2 ,3 ,... ,ù - 1 } üSSSnnnU={0,1,2,3,…,u–1}U={0,1,2,3,…,u–1}U = \{0, 1, 2, 3, \dots , u – 1\}uuu 操作insert(x)(将元素添加x到SSS)和find(x)(检查元素是否x为S的成员SSS)。 我不在乎其他操作。对于定向,在我正在使用的应用程序中,我们有u≈1010u≈1010u \approx 10^{10}。 我知道在O(1)时间内同时提供这两种操作的实现O(1)O(1)O(1),所以我主要担心数据结构的大小。我希望有数十亿个条目,但希望避免交换。 如果有必要,我愿意牺牲运行时间。我可以接受O(\ log n)的摊销运行时间O(logn)O(log⁡n)O(\log n);不允许使用预期的运行时或ω(logn)ω(log⁡n)\omega(\log n)中的运行时。 我的一个想法是,如果SSS可以表示为范围的并集[xmin, xmax],那么我们将能够以一些性能下降的代价节省存储空间。同样,其他一些数据模式也是可能的,例如[0, 2, 4, 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.