Tag: 算法

在3d网格中转发(绘图)线

我需要像bressenham算法这样的东西,但不太适合3D网格空间 我得到了3d网格的单元格(边缘大小1.0)需要从点S开始并前进到点K’触摸’所有单元格线接触(即使只触及边缘点我需要所有8个单元格) 需要使用它来遍历向单元格写入值或从单元格中读取值,并且需要它与可管理的一样快(这将大量使用每帧绘制数百万个这样的3d网格线) 有人可以说它看起来怎么样? TNX

在C中排序链表

我被要求编写一个函数,它接受3个未排序的链表并返回一个组合所有三个列表的单个排序链表。 您能想到的最佳方式是什么? 我没有真正的内存限制,但你有/没有内存限制你会做什么?

C上的置换生成器

我需要一个简单的置换生成器算法,它可以应用于简单的C语言。

如何在C中简化这个有效的二进制搜索代码?

几个星期前,嘿家伙们开始在C语言中学习algothiritms,只是想知道如何让我的代码更简单,它只是一个二元搜索function。 但唯一的问题是你必须保持论点相同,提前谢谢。 bool search(int value, int values[], int n) { int min = values[0]; int max = values[n-1]; int average = (min + max) / 2; if(average == value) { return true; } while (average > value) { max = average – 1; average = (min + max) / 2; } while (average < value) […]

x86上的有符号和无符号算术实现

C语言有签名和无符号类型,如char和int。 我不确定,它是如何在汇编级别实现的,例如在我看来,有符号和无符号的乘法会带来不同的结果,所以汇编是做无符号和有符号算术还是只有一个,这在某种程度上是模拟的不同的情况?

从最接近目标值的数组中选择值的算法?

我有一个几乎排序的值数组28个元素长。 我需要找到与算法提供的目标值相加的一组值(或者如果找不到精确的和,则最接近的总和低于目标值)。 我目前有一个简单的算法来完成这项工作,但它并不总能找到最佳匹配。 它在理想情况下使用一组特定的值工作,但我需要一个更强大和准确的解决方案,可以处理更多种类的数据集。 该算法必须用C语言编写,而不是用C ++编写,并且用于嵌入式系统,因此请记住这一点。 这是我目前的算法供参考。 它从可用的最高值开始迭代。 如果当前值小于目标总和,则将该值添加到输出并从目标总和中减去该值。 重复此过程,直到达到总和或用完值。 它假设一个几乎提升的排序列表。 //valuesOut will hold a bitmask of the values to be used (LSB representing array index 0, next bit index 1, etc) void pickValues(long setTo, long* valuesOut) { signed char i = 27;//last index in array long mask = 0x00000001; (*valuesOut) = 0x00000000; mask = […]

查找数组中元素总和最大的子序列

我最近采访了一家公司,他们让我写一个算法,找到数组中元素总和最大的子序列。 数组中的元素可以是负数。 是否有O(n)解决方案? 非常感谢任何好的解决方案。

QuickSort和Hoare分区

我很难将QuickSort与Hoare分区转换为C代码,但无法找到原因。 我正在使用的代码如下所示: void QuickSort(int a[],int start,int end) { int q=HoarePartition(a,start,end); if (end x); do i++; while (a[i] < x); if (i < j) swap(&a[i],&a[j]); else return j; } } 另外,我真的不明白为什么HoarePartition有效。 有人可以解释它为什么有效,或者至少把我链接到一篇文章吗? 我已经看到了分区算法的逐步完成,但我没有直观的感觉。 在我的代码中,它似乎甚至没有用。 例如,给定数组 13 19 9 5 12 8 7 4 11 2 6 21 它将使用数据透视表13,但最终会使用数组 6 2 9 5 12 8 7 4 […]

在C – Turlach实施中滚动中位数

有谁知道在C中是否有一个干净的Turlach滚动中值算法实现? 我在将R版本移植到干净的C版本时遇到了麻烦。 有关算法的更多详细信息,请参见此处 。 编辑:正如darkcminor所指出的,matlab有一个函数medfilt2 ,它调用ordf ,这是一个滚动顺序统计算法的交流实现。 我相信算法比O(n ^ 2)快,但它不是开源的,我不想购买图像处理工具箱。

找出数组中的重复元素

存在大小为n的数组,并且数组中包含的元素在1和n-1之间,使得每个元素出现一次并且仅一个元素出现多于一次。 我们需要找到这个元素。 虽然这是一个非常常见的问题,但我仍然没有找到合适的答案。 大多数建议是我应该将数组中的所有元素相加,然后从中减去所有索引的总和,但如果元素的数量非常大,这将不起作用。 它会溢出。 关于使用异或门dup = dup ^ arr[i] ^ i ,也有一些建议,我不清楚。 我已经提出了这个算法,这是一个增加算法的增强,并将在很大程度上减少溢出的机会! for i=0 to n-1 begin : diff = A[i] – i; sum = sum + diff; end diff包含duplicate元素,但是使用这个方法我无法找到重复元素的索引。 为此,我需要再次遍历数组,这是不可取的。 任何人都可以提出一个更好的解决方案,不涉及添加方法或XOR方法在O(n)中工作?