Tag: 算法

这个改组算法有什么问题吗?

我一直在做一些休闲度假计算。 我的迷你项目是对意大利“tomboli”游戏的模拟。 一个关键的构建模块是对以下过程的模拟; 游戏由一个男人控制,一袋有90个大理石,编号为1到90.他从包中随机抽出弹珠,每次都给玩家打出大理石编号。 经过一番思考后,我为这个构建块编写了以下代码; // NBR marbles, numbered 1…NBR are in a bag. Simulate randomly // pulling them from the bag, one by one, until the bag is empty void bag( int random_sequence[NBR] ) { int i; // Store each marble as it is pulled out int *store = random_sequence; // Array of marbles […]

c ++中的大整数

我知道这个问题可能已在本论坛多次和网络上提出过。 我被要求在c ++中创建一个大整数的实现,但是有一个约束,我的一个构造函数应该将一个int作为一个参数…所以我猜我会有多个非默认的构造函数..所以我的问题是,最简单的方法是什么?

凸壳中最大的三角形

问题已经得到解答,但我面临的主要问题是理解其中一个答案。 来自https://stackoverflow.com/a/1621913/2673063 以下算法O(n)如何? 它表示如果需要,首先对点进行排序/计算凸包(在O(n log n)时间内),我们可以假设我们有凸多边形/船体,其点按照它们在多边形中出现的顺序循环排序。 调用点1,2,3,…,n。 令(变量)点A,B和C分别从1,2和3开始(以循环次序)。 我们将移动A,B,C直到ABC是最大面积三角形。 (这个想法类似于旋转卡尺方法,在计算直径(最远的一对)时使用。) 在A和B固定的情况下,前进C(例如,最初,A = 1,B = 2,C前进到C = 3,C = 4,…),只要三角形的面积增加,即,只要面积(A,B,C)≤面积(A,B,C + 1)。 这个点C将是那些固定A和B最大化区域(ABC)的点。(换句话说,函数Area(ABC)是C的函数的单峰)。) 接下来,如果增加面积,则前进B(不改变A和C)。 如果是这样,再次按上述方式推进C. 然后如果可能的话再次前进B等。这将给出最大区域三角形,其中A作为顶点之一。 (到这里的部分应该很容易certificate,并且简单地为每个A单独执行此操作将给出O(n2)。但请继续阅读。)现在再次推进A,如果它改善了面积等,虽然这有三个“嵌套的“循环,请注意B和C总是前进”,并且它们总共最多前进2n次(类似A最多前进n次),因此整个过程在O(n)时间内运行。

查找数组中重复数字的算法—最快的方法

我需要最快速,最简单的算法,在数组中找到重复的数字,也应该能够知道重复的数量。 例如:如果数组是{2,3,4,5,2,4,6,2,4,7,3,8,2} 我应该知道有4个,2个3个,3个4个。

加权区间调度问题与动态程序

我的问题与其他讨论有关 。 我正在尝试使用动态程序将该算法实现为递归调用。 问题陈述: 作业j从sj开始,在fj结束,并且具有重量或值vj 。 如果两个作业不重叠,则会兼容。 目标:找到相互兼容的作业的最大权重子集。 书籍提出的解决方案是使用解决方案表来存储所有问题,这些问题将在递归迭代调用期间在需要时重用。 解决问题的步骤是: Input: n, s1,…,sn , f1,…,fn , v1,…,vn Sort jobs by finish times so that f1 > f2 >… > fn. Compute p(1), p(2), …, p(n) Where p(j) = largest index i < j such that job i is compatible with j. for j = 1 […]

在多列上对二维数组进行排序

我需要使用C或C ++在多列上对二维二维数组进行排序。 有人能指出我应该使用的算法还是具有此function的现有库(可能是boost?)? 我有一种感觉,写一个递归函数可能是要走的路,但我懒得写出算法或自己实现它,如果它已在其他地方完成。 🙂 谢谢

最快的算法,可以将数字加总到N

我想在C中使用非常快的算法或代码来执行以下任务:对于任何给定的整数N,将所有数字从1加到N,而不假设N是正数。 我做了一个从1到N的求和循环,但它太慢了。

所有数组元素的比较 – C算法

我有一个矩阵m * n ,对于每一行,我需要比较它们之间的所有元素。 对于我发现的每对情侣,我将调用一个将执行某些计算的函数。 例: my_array -> {1, 2, 3, 4, 5, …} I take 1 and I have: (1,2)(1,3)(1,4)(1,5) I take 2 and I have: (2,1)(2,3)(2,4)(2,5) and so on 使用CI写道: for (i=0; i<array_length; i++) { for (k=0; k<array_length; k++) { if (i==k) continue; //Do something } } } 我想知道我是否可以使用复杂度较低的算法。

C中的大数减法

大约20分钟前,我刚刚在一门介绍性的C课程中完成了考试。 关于考试的第一个问题让我措手不及,并且找到了两个大数字的差异。 目标是按值获取两个结构(N1和N2),并将差异存储在通过引用传递的结构中(N3)。 我们被允许假设N3是以所有’0’开始的。 MAX大小可以是任何值,因此如果数字超过100位,解决方案仍然有效。 这是基本代码(原始可能略有不同,这是来自内存) #include #include /* MAX can be any length, 10, 50, 100, etc */ #define MAX 10 struct bignum { char digit[MAX]; char decimaldigit[MAX/2]; }; typedef struct bignum bigNum; void difference(bigNum, bigNum, bigNum *); /* Original values in N1 and N2 N1.digit = { ‘0’, ‘0’, ‘0’, ‘5’, ‘4’, ‘8’, […]

如何检查是否使用了IEEE 754单精度(32位)浮点表示?

我想在目标板上测试以下内容: 使用IEEE 754单精度(32位)浮点变量实现’float’吗? 使用IEEE 754双精度(64位)浮点变量实现“双重”吗? 有什么方法可以用简单的C程序测试它。