Tag: 算法

字符串的排列:如何删除重复的排列?

这是一个打印字符串字符排列的标准函数: void permute(char *a, int i, int n) { int j; if (i == n) printf(“%s\n”, a); else { for (j = i; j < n; j++) //check till end of string { swap((a+i), (a+j)); permute(a, i+1, n); swap((a+i), (a+j)); //backtrack } } } void swap (char *x, char *y) { char temp; temp = […]

数据压缩算法

我想知道是否有人有一个数据压缩算法列表。 我基本上都不知道数据压缩,我希望能够了解更多关于不同算法的知识,看看哪些是最新的,还有很多ASIC尚未开发。 我希望实现一个数据压缩ASIC,它独立于进入的数据类型(音频,video,图像等)。 如果我的问题太开放,请告诉我,我会修改。 谢谢

C中的算法 – 用数字进行数字 – 单位为3的数字

我在接受采访时遇到了这个问题。 任何单位位置为3的数字至少有一个包含所有1的数字。 例如,3的倍数是111,13的倍数是111111.给定一个以3结尾的数字,我被问到找到包含所有1的倍数的最佳方法。 现在,一种简单的方法是可能的,你不考虑空间问题,但随着数量的增长,有时即使它没有,C中的int (或者那个!中的long int )也不能保持那个倍数。 在C中实现这种算法的最佳方法是什么?

类调度到布尔可满足性最终部分

我几个星期以来一直在一个非常有趣的项目上工作但不幸的是背景非常复杂。 我已经问了3个问题: 类调度到布尔可满足性[多项式时间减少]最终部分 (这里) 类调度到布尔可满足性[多项式时间减少]第2部分 类调度到布尔可满足性[多项式时间缩减] 在他们两个中,我得到了答案(再次感谢@Amit),但现在到了最后一部分,谁将使这个项目可用:) 我现在可以管理: N个时间间隔。 C课程。 T老师。 S房间。 我的约束如下: 2名教师不能同时在同一个房间。 2门课程不能同时在同一个房间。 教师只能教授特定课程。 有些课程只能在特定的时间间隔内进行。 所以这是现在,我的结果: 但是这里是我要添加的最后一部分:我想管理一组学生,具有以下约束: 一个小组只有一些课程要做。 2个小组可以同时在同一个房间内进行特定课程(例如Magistral课程) 同样,我成功地隔离了约束,但我不知道如何将此约束转换为“时间间隔不应重叠”约束。 在此先感谢,祝贺,

将最大堆转换为二叉搜索树

我们给出了一个2 m – 1个不同的,可比较的元素的数组,从1开始索引。 我们可以将数组视为完整的二叉树: Node is placed at index i. Left child is placed at 2i. Right child is placed at 2i+1. 例如,数组 [7 6 4 5 2 3 1] 是树 7 / \ 6 4 / \ / \ 5 2 3 1 现在,当被视为二叉树时,这些元素满足堆属性,节点大于其子节点: A[i] > A[2i] and A[i] > A[2i+1] 是否存在相当快速的就地算法来重新排列数组的元素,以便生成的二叉树(如上所述)是二叉搜索树? 回想一下,在二叉搜索树中,节点大于其所有左后代,并且少于其所有右后代。 […]

找到毕达哥拉斯三元组,其中a + b + c = 1000

毕达哥拉斯三元组是一组三个自然数,a <b <c,其中, 2 + b 2 = c 2 例如,3 2 + 4 2 = 9 + 16 = 25 = 5 2 。 恰好存在一个毕达哥拉斯三元组,其中a + b + c = 1000.找到产品abc。 资料来源 : http : //projecteuler.net/index.php?section = problem&id = 9 我试过但不知道我的代码出错了。 这是我在C中的代码: #include #include #include void main() { int a=0, b=0, c=0; int i; […]

为什么矩阵乘法算法中的循环次序会影响性能?

我有两个函数来查找两个矩阵的乘积: void MultiplyMatrices_1(int **a, int **b, int **c, int n){ for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) for (int k = 0; k < n; k++) c[i][j] = c[i][j] + a[i][k]*b[k][j]; } void MultiplyMatrices_2(int **a, int **b, int **c, int n){ for (int i […]

查找数组中缺少的元素

假设你有一个大小为n的数组A [1..n],它包含集合{1..n}中的元素。 但是,缺少两个元素(并且可能重复了两个数组元素)。 找到缺少的元素。 例如,如果n = 5,A可以是A [5] = {1,2,1,3,2}; 所以缺少的元素是{4,5} 我使用的方法是: int flag[n] = {0}; int i; for(i = 0; i < n; i++) { flag[A[i]-1] = 1; } for(i = 0; i < n; i++) { if(!flag[i]) { printf("missing: %d", (i+1)); } 空间复杂性来自O(n)。 我觉得这是一个非常儿童和低效的代码。 那么请你提供一个更好的空间和时间复杂度的更好的算法。

该算法如何计算32位整数中的设置位数?

int SWAR(unsigned int i) { i = i – ((i >> 1) & 0x55555555); i = (i & 0x33333333) + ((i >> 2) & 0x33333333); return (((i + (i >> 4)) & 0x0F0F0F0F) * 0x01010101) >> 24; } 我已经看到这个代码计算32位整数中的位数等于1 ,我注意到它的性能优于__builtin_popcount但我无法理解它的工作方式。 有人可以详细解释这段代码的工作原理吗?

用于渲染大量立方体的剔除技术

我正在开展个人学习项目,以制作Minecraft克隆。 除了一件事,它的工作非常好。 类似于我的世界,我的地形有很多立方体堆叠在Y上,所以你可以挖掘。 虽然我做了截头剔除,但这仍然意味着我无用地在我下方画出所有层的立方体。 立方体是X,Y和Z有序的(虽然只在1个方向,所以从技术上讲,它不是Z订购到相机)。 我基本上从玩家的位置只添加指向玩家周围的立方体的指针。 然后,我对这些进行了截击。 我不做oct树细分。 我想到的只是没有渲染玩家下面的图层,除非如果玩家向下看到一个洞,这不起作用。 鉴于此,我怎么能避免在我下面渲染我看不到的立方体,或者还有其他立方体隐藏的立方体。 谢谢 void CCubeGame::SetPlayerPosition() { PlayerPosition.x = Camera.x / 3; PlayerPosition.y = ((Camera.y – 2.9) / 3) – 1; PlayerPosition.z = Camera.z / 3; } void CCubeGame::SetCollids() { SetPlayerPosition(); int xamount = 70; int zamount = 70; int yamount = 17; int xamountd = xamount * […]