Tag: 算法

在数组C中找到最大的2×2“平方”值

对于我的任务,我必须接受一组值,将它们保存到第二个数组并打印出4个最高值的“正方形”。 这意味着“square”,其元素之和在数组中最大。 Example: Given the array 1 2 3 4 5 6 7 8 9 10 11 12 the output should be 7 8 11 12 我最初尝试使用嵌套for循环集来查找并将每个后续最大值存储到第二个数组中,但似乎无法找出正确的算法。 到目前为止,我只给了我相同的值(在这个例子中,12)。 另外,我已经意识到这种方式不允许我在第二个数组中保持格式相同。 我的意思是,如果我保存在数组b [0] [0]中找到的最大数字,它将在错误的位置,我的方块将关闭,看起来像: 12 11 10 9 这是我到目前为止所拥有的: int main(){ int og[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}, new[2][2]={}, rows; int columns, i, high,j,high2,high3,high4; high = new[i][0]; high2= high – 1; high3= […]

水泥效应 – 艺术效果

我希望对图像产生影响,其中所得到的图像看起来好像是在粗糙的水泥背景上绘制的,并且水泥背景在边缘附近自定义以突出它们…请帮助我编写算法来生成这样的效果。 第一张图像是原始图像 第二个图像是我正在寻找的输出。 请注意检测到边缘并且边缘在边缘附近变化以清楚地指示边缘

使用c语言中的递归进行合并排序

#include #include int arr[20]; void main() { int n,i; clrscr(); printf(“\n\t\t\t——Merge Sorting——\n\n”); printf(“Enter the size of array\n”); scanf(“%d”,&n); printf(“Enter the elements:\n”); for(i=0; i < n; i++) { scanf("%d",&arr[i]); } merge_sort(arr,0,n-1); printf("\n\n\t\t\t—–Merge Sorted Elements—–\n\n"); printf("Sorted array:\t"); for(i=0; i < n; i++) { printf("\t%d",arr[i]); } getch(); } int merge_sort(int arr[],int low,int high) { int mid; if(low < […]

整数的最小除数,而不是计算平方根

此代码给出整数的最小除数。 但问题是我必须计算平方根。 有没有办法让我不必明确计算平方根? int d,r,n; scanf(“%d”,&n); if(n%2==0) { printf(“2 is ans”); } else { r=sqrt(n); d=3; while((n%d!=0)&&d<r) { d=d+2; } if(n%d==0) printf("ans is %d",d); else printf("ans is 1"); }

最常见的连续子序列 – 算法

我的问题很简单:是否有O(n)算法用于找到两个序列A和B之间最长的连续子序列? 我搜索了它,但所有结果都是关于LCS问题,这不是我正在寻找的。 注意:如果您愿意提供任何示例代码,我们非常欢迎您这样做,但如果可以的话,请使用C或C ++。 编辑:这是一个例子: A: { a, b, a, b, b, b, a } B: { a, d, b, b, b, c, n } longest common contiguous subsequence: { b, b, b }

释放二叉树而不递归

参考C中解除分配二进制树结构的问题 struct Node{ Node *parent; Node *next; Node *child; } 我试图释放二叉树。 我遇到的问题是分配的对象是5520,并且对自由函数的调用次数是2747.我不知道为什么,它应该真正自由并遍历树中的所有节点,这里是我使用的代码 int number_of_iterations =0; int number_of_deletions =0; void removetree(Node *node) { number_of_iterations++; while(node != NULL) { Node *temp = node; if(node->child != NULL) { node = node->child; temp->child = node->next; node->next = temp; } else { node = node->next; remove(temp); number_of_deletions++ } } } […]

使用C标准数学库精确计算标准正态分布的CDF

标准C数学库不提供计算标准正态分布的CDF函数normcdf() 。 但它确实提供了密切相关的函数:错误函数erf()和补充错误函数erfc() 。 计算CDF的最快方法通常是通过误差函数,使用预定义的常量M_SQRT1_2来表示√½: double normcdf (double a) { return 0.5 + 0.5 * erf (M_SQRT1_2 * a); } 显然,这在负半平面中遭受大量的减法消除,并且不适合大多数应用。 由于使用erfc()可以很容易地避免取消问题,但是erf()性能通常比erf()低一些,因此最常推荐的计算是: double normcdf (double a) { return 0.5 * erfc (-M_SQRT1_2 * a); } 一些测试表明,在负半平面中产生的最大ulp误差仍然相当大。 使用精确到0.51 ulps的erfc()的双精度实现,可以在normcdf()观察到高达1705.44 ulps的误差。 这里的问题是erfc()输入中的计算误差被erfc()固有的指数缩放放大(有关由取幂引起的误差放大的解释,请参阅此答案 )。 下面的文章展示了当浮点操作数与任意精度常数(如√½)相乘时,如何实现(几乎)正确舍入的产品: Nicolas Brisebarre和Jean-Michel Muller,“正确舍入乘以任意精度常数”, IEEE Transactions on Computers ,Vol。 57,第2期,2008年2月,第165-174页 本文提倡的方法依赖于融合乘法 – 加法运算,该运算可用于所有常见处理器体系结构的最新实现,并通过标准数学函数fma()在C中公开。 这导致以下版本: […]

Infix到postfix algo rithm,负责一元运算符

好的,所以算法的I / P将是这样的表达式: a+(-b) a*-b+c 即标准C编译器支持的任何表达式。 现在我已经将输入格式化为标记流,标记包含无论是操作符还是操作数的信息。 该算法应该采用这个,并给我一个我可以评估的后缀表达式。 如果我使用标准转换算法,我无法区分一元和二元运算 。 就像*( – b)会给我ab- *,这将以错误的方式进行评估。

从inorder和preorder遍历构造二叉树的时间复杂度

给定这是从inorder和preorder遍历构造树的代码。 我无法弄清楚他们是如何达到O(n ^ 2)时间复杂度的。 有任何想法吗? 我看到在顺序序列中搜索索引将是O(n),其余的如何计算?

汉明重量只写在二元运算中?

我只需要用二进制运算(&,^,>>)来写一个汉字加权一个字节的表达式; 没有任何循环,只是一个公式。 我知道有很多算法可以计算汉明重量,但所有算法都使用算术运算或循环。 如果我们从http://en.wikipedia.org/wiki/Hamming_weight获取算法,那么第一个和D = B + C可以写成D = B ^ C ^(B&C << 1),但是后面的两个和更复杂。 有人有提示吗? 更新:谢谢你的帮助。 实际上,我需要以下内容: int popcount_1(unsigned char in){ unsigned char m1 = 0x55; unsigned char m2 = 0x33; unsigned char m4 = 0x0f; unsigned char B,C = 0; unsigned char x = in; x = (x & (x << 1) & […]