Tag: algorithm

用于整数分区的优雅Python代码

我试图编写代码来解决标准的整数分区问题( Wikipedia )。 我写的代码是一团糟。 我需要一个优雅的解决scheme来解决这个问题,因为我想改善我的编码风格。 这不是一个家庭作业问题。

find数组中唯一未配对的元素

埃森哲面试问题: 你已经得到了一个大小2n+1的数组,它有n对整数(可以是+ve , -ve或0 )和一个不成对的元素。 你会如何find不成对的元素? 一对意味着重复 。 所以(3,3)是一对, (3,-3) 不是一对。

为给定的string生成所有唯一的子string

给定一个strings ,生成一组所有唯一子串的最快方法是什么? 例如:对于str = "aba"我们将得到substrs={"a", "b", "ab", "ba", "aba"} 。 最初的algorithm是在每次迭代中遍历整个string长度为1..n子串,产生一个O(n^2)上界。 是否有更好的界限? (这在技术上是功课,所以指针也是受欢迎的)

matrix乘法:matrix大小差异小,时序差异大

我有一个matrix乘法代码,看起来像这样: for(i = 0; i < dimension; i++) for(j = 0; j < dimension; j++) for(k = 0; k < dimension; k++) C[dimension*i+j] += A[dimension*i+k] * B[dimension*k+j]; 这里,matrix的大小由dimension表示。 现在,如果matrix的大小是2000,运行这段代码需要147秒,而如果matrix的大小是2048,则需要447秒。 所以虽然没有区别 (2048 * 2048 * 2048)/(2000 * 2000 * 2000)= 1.073,时间差为447/147 = 3。有人可以解释为什么会发生这种情况吗? 我预计它会线性扩展,这是不会发生的。 我不是想做出最快的matrix乘法代码,只是想明白为什么会发生。 规格:AMD Opteron双核心节点(2.2GHz),2G RAM,gcc v 4.5.0 程序编译为gcc -O3 simple.c 我已经在Intel的icc编译器上运行了这个,并且看到了类似的结果。 编辑: 正如评论/答案中所build议的那样,我运行了维度= […]

合并sorting链接列表

最近我在刷新一些基础知识,发现合并sorting链表是一个很好的挑战。 如果你有一个很好的实现,那么在这里展示它。

find数字数组中缺失数字的最快方法

我有一个数字从1到100(包括两个端点)的数组。 数组的大小为100.数字随机添加到数组中,但数组中有一个随机空槽。 find那个插槽的最快方法是什么,以及插槽中应该放置的数量是多less? Java解决scheme是可取的。

寻找一个点是否在矩形内

我想找出一个点是否在矩形内。 矩形可以以任何方式定向,不需要轴alignment。 我能想到的一种方法是旋转矩形和点坐标以使矩形轴alignment,然后通过简单地testing点的坐标是否位于矩形的坐标之内。 上述方法需要旋转,因此需要浮点操作。 有没有其他有效的方法来做到这一点?

高维数据中最近的邻居?

几天前我问了一个问题 ,如何find给定vector的最近邻居。 我的向量现在是21个维度,在我进一步研究之前,因为我不是来自机器学习和math领域,我开始问自己一些基本的问题: 欧几里德距离是寻找最近邻居的好方法吗? 如果不是,我有什么select? 另外,如何确定确定k邻居的正确阈值? 是否有一些分析可以做出这个数字呢? 以前,我被build议使用kd-Trees,但维基百科页面清楚地表明,对于高维数据,kd-Tree几乎等同于蛮力search。 在这种情况下,在百万点数据集中有效地find最近邻的最佳方法是什么? 有人可以澄清一些(或全部)上述问题吗?

说明如何查找循环链表中的循环开始节点工作?

我知道龟兔会议结束了循环的存在,但是如何在会议场所保持野兔的同时将龟移动到链表的起点,然后又一步一步地让它们在循环的起始点相遇呢?

algorithm来比较两个图像

给定两个不同的图像文件(以我select的任何格式),我需要编写一个程序来预测这个机会是否是另一个机器的非法拷贝。 副本的作者可能会做旋转,做负面的东西,或者添加微不足道的细节(以及改变图像的尺寸)。 你知道任何algorithm来做这种工作吗?