Tag: algorithm

高阶统一

我正在研究一个更高阶的定理certificate,其中统一似乎是最困难的子问题。 如果Huet的algorithm仍然被认为是最先进的,那么是否有任何人有任何解释的链接,这些链接是由程序员而不是math家来理解的? 或甚至任何它在哪里工作的例子和通常的一阶algorithm都没有?

如何将表格旋转45度并将结果保存到另一个表格中?

我有一张桌子。 ——— | a | b | ——— | a | b | ——— 我想旋转它45度(顺时针或逆时针),并保存到另一个表。 例如,如果我逆时针旋转45度,它将是: ————- | b | | | ————- | a | b | | ————- | a | | | ————- 另一个例子,当我旋转 ————- | a | b | c | ————- | d | e | f | ————- | […]

在sortingmatrix(行n列)中查找O(log n)

说我有一个matrix( MxN )的行和列sorting。 每一行中的所有元素按照递增顺序排列 每列中的所有元素都按照顺序排列 所有元素都是整数 没有其他假设可以做出 例: [1 5 8 20] [2 9 19 21] [12 15 25 30] 我必须find一个给定的数字是否存在于matrix中(基本search)。 我有一个algorithm运行O(n) int row = 0; int col = N-1; while (row < M && col >= 0) { if (mat[row][col] == elem) { return true; } else if (mat[row][col] > elem) { col–; } […]

最快的代码C / C ++来select一组27个浮点值的中位数

这是众所周知的selectalgorithm。 请参阅http://en.wikipedia.org/wiki/Selection_algorithm 。 我需要它来find一组3×3×3体素值的中值。 由于体积是由十亿个体素组成,并且algorithm是recursion的,所以最好稍微快一点。 总体而言,可以预期的是价值相对接近。 迄今为止我已经试过的最快速的已知algorithm使用快速sorting分区function。 我想知道是否有更快的。 我已经“发明”了使用两堆的速度提高了20%,但是使用散列的速度更快。 在执行这个之前,我想知道是否已经有一个快速的解决scheme。 我使用浮点数的事实应该是无关紧要的,因为它们可以在反转符号位之后被认为是无符号整数。 订单将被保留。 编辑:基准和源代码转移到一个单独的答案,由戴维兰德曼build议。 请看下面的chmike的答案。 编辑 :到目前为止,最有效的algorithm是由Boojum引用作为快速中值和双边过滤纸,现在是这个问题的答案的链接。 这种方法的第一个聪明的想法是使用基数sorting,其次是结合中间search相邻像素谁共享很多像素。

algorithm来查找给定string的下一个更大的排列

我想要一个有效的algorithm来查找给定string的下一个更大的排列。

algorithm:如何使用RGB值通过黄色从红色变为绿色?

我想显示一个基于从0到100的值的颜色。在一端(100),它是纯红色,另一端(0),纯绿色。 在中间(50),我希望它是黄色的。 我希望颜色从一个到另一个逐渐消失,例如75,颜色是半红,半黄等等。 如何编程RGB值来反映这种衰落? 谢谢。

发现长模式

给定一个有序的数字列表,我想find连续元素之间的差异在几何上增加的最长的子序列。 所以如果列表是 1, 2, 3, 4, 7, 15, 27, 30, 31, 81 那么子序列是1, 3, 7, 15, 31 。 或者考虑具有a = 3和k = 2的子序列5,11,23,47的1,2,5,6,11,15,23,41,47。 这可以在O( n 2 )时间解决吗? 其中n是列表的长度。 我对两个a和k都是整数的ak , ak 2 , ak 3等一般情况都感兴趣,在a = 1的特殊情况下,差值的变化是k , k 2 , k 3等

A *在网格上滚动的容许启发式

我需要一些帮助为以下问题find一个好的启发式: 给你一个R by- C格子和一个六面骰子。 让start和end在这个网格上是两个不同的单元格。 从头到尾找出一条path,使得当死亡沿path转向时,抬头的面的总和最小。 模具的起始方向如下(“2”朝南): 我模拟这个问题的方式是将模具面部的价值作为graphics边缘的成本。 graphics的顶点的forms是(row, col, die) (即网格中的一个位置和die的当前状态/方向)。 顶点不是简单的(row, col)的原因是因为你可以结束在同一个单元与多个configuration/方向的骰子。 我用A *find解决问题的办法; 给出的答案是正确的,但效率不够高。 我确定问题是我正在使用的启发式。 目前我使用曼哈顿距离,显然是可以接受的。 如果我将启发式乘以一个常量,那么它就不再是可以接受的了:它的运行速度要快得多,但并不总能find正确的答案。 我需要一些帮助来find一个比曼哈顿距离更好的启发式。

我怎样才能确定一个子序列可以从序列中删除的所有可能的方式?

给定两个序列A和B ,如何生成B可以从A中删除的所有可能方式的列表? 例如,在JavaScript中,如果我有一个functionremoveSubSeq采取两个数组参数,我想要的,它将工作如下: removeSubSeq([1,2,1,3,1,4,4], [1,4,4])将返回[ [2,1,3,1], [1,2,3,1], [1,2,1,3] ]因为最后的4将匹配,并且有三个可能的地方匹配1 removeSubSeq([8,6,4,4], [6,4,8])会返回[]因为第二个参数实际上不是一个子序列 removeSubSeq([1,1,2], [1])将返回[ [1,2], [1,2] ]因为有两种方式可以删除1,即使它会导致重复

数组作业问题

给你一个整数在1到1000000之间的数组。 一个整数在数组中两次。 你怎么能确定哪一个? 你能想出一个方法来做一点点额外的记忆。 ALGO: 解决scheme1: 有一个哈希表 遍历数组并将其元素存储在散列表中 只要你find一个已经在哈希表中的元素,它就是dup元素 优点: 它运行在O(n)时间,只有一次通过 缺点: 它使用O(n)额外的内存 溶液2: 使用合并sorting(O(nlogn)时间)对数组进行sorting 再次parsing,如果你看到一个元素两次,你有dup。 优点: 它不使用额外的内存 缺点: 运行时间大于O(n) 你们能想出更好的解决scheme吗?