Tag: algorithm

可见光谱的RGB值

我需要一个algorithm或函数来将可见光谱范围的每个波长映射到相应的RGB值。 RGB系统和光的波长之间是否有结构关系? 喜欢这个图像: 替代文本http://www1.appstate.edu/~kms/classes/psy3203/Color/spectrum5.gif 对不起,如果这是无关的: – ]

将均匀分布转换为正态分布

如何将一个均匀的分布(如大多数随机数发生器产生的,例如0.0和1.0之间)转换成正态分布? 如果我想要一个我select的平均和标准偏差怎么办?

如何将浮动转换为可读的分数?

假设我们有0.33,我们需要输出“1/3”。 如果我们有“0.4”,我们需要输出“2/5”。 这个想法是让用户理解“x部分y”是理解数据的一种更好的方法。 我知道百分比是一个很好的替代品,但我想知道是否有一个简单的方法来做到这一点?

最优雅的方式来产生素数

什么是最优雅的方式来实现这个function: ArrayList generatePrimes(int n) 这个函数生成前n素数(编辑:其中n>1 ),所以generatePrimes(5)将返回一个ArrayList {2, 3, 5, 7, 11} ArrayList {2, 3, 5, 7, 11} 。 (我在C#中这样做,但我很满意Java的实现 – 或者其他类似的语言(所以不是Haskell))。 我知道如何写这个function,但是当我昨晚做了这个function的时候,并没有像我希望的那样好。 这是我想出来的: ArrayList generatePrimes(int toGenerate) { ArrayList primes = new ArrayList(); primes.Add(2); primes.Add(3); while (primes.Count < toGenerate) { int nextPrime = (int)(primes[primes.Count – 1]) + 2; while (true) { bool isPrime = true; foreach […]

如何仅使用两个指针来反转单向链表?

我会想知道是否存在一些逻辑来扭转链接列表只有两个指针。 以下用于使用三个指针(即p,q,r)来反转单个链表: struct node { int data; struct node *link; }; void reverse() { struct node *p = first, *q = NULL, *r; while (p != NULL) { r = q; q = p; p = p->link; q->link = r; } q = first; } 有没有其他的替代scheme来扭转链表? 就时间复杂性而言,扭转单链表的最佳逻辑是什么?

algorithm检测两个矩形的交集?

我正在寻找一种algorithm来检测两个矩形相交(一个在任意angular度,另一个只有垂直/水平线)。 testing一个angular落是否在其他几乎所有的工作。 如果矩形形成十字形状,则失败。 避免使用线条的斜坡似乎是一个好主意,这需要垂直线条的特殊情况。

最快的固定长度6 int数组

回答另一个堆栈溢出问题( 这一个 )我偶然发现了一个有趣的子问题。 对6个整数的数组进行sorting的最快方法是什么? 由于问题是非常低的水平: 我们不能假定图书馆是可用的(而且这个调用本身也有其成本),只有普通的C 为避免清空指令stream水线(成本非常高),我们应该尽量减less分支,跳转以及其他任何types的控制stream程中断(例如隐藏在&&或||中序列点后面的stream程)。 空间受到限制,最大限度地减less寄存器和内存使用是一个问题,理想情况下,sorting可能是最好的。 真的这个问题是一种高尔夫,目的不是要尽量减less来源长度,而是执行时间。 我将其称为“Zening”代码,用于Michael Abrash所着的“代码优化之禅”及其续篇的书名。 至于为什么它很有趣,有几层: 这个例子很简单,容易理解和测量,涉及的C技能不多 它显示了对于这个问题select一个好的algorithm的效果,还显示了编译器和底层硬件的效果。 这是我的参考(天真,没有优化)的实现和我的testing集。 #include <stdio.h> static __inline__ int sort6(int * d){ char j, i, imin; int tmp; for (j = 0 ; j < 5 ; j++){ imin = j; for (i = j + 1; i < 6 ; i++){ if (d[i] […]

创build没有重复的随机数字序列

重复: O(1)中唯一的随机数? 我想要一个伪随机数发生器,可以随机生成没有重复的数字。 例如: 随机(10) 可能会返回5,9,1,4,2,8,3,7,6,10 有没有更好的方法来做到这一点,除了使数字的范围和洗牌,或检查生成的列表重复? 编辑: 另外我希望它能够在没有整个范围的情况下生成大数字。 编辑: 我看到每个人都build议洗牌algorithm。 但是如果我想产生一个大的随机数(1024字节+),那么这个方法会占用更多的内存,比我只使用一个普通的RNG并插入一个Set直到它是一个指定的长度,对不对? 有没有更好的mathalgorithm。

第n次斐波纳契数在次线性时间

有没有algorithm来计算次线性时间的第n个斐波纳契数?

Eratosthenes的分割筛?

做一个简单的筛子很容易: for (int i=2; i<=N; i++){ if (sieve[i]==0){ cout << i << " is prime" << endl; for (int j = i; j<=N; j+=i){ sieve[j]=1; } } cout << i << " has " << sieve[i] << " distinct prime factors\n"; } 但是当N很大,我不能在内存中保存这样的数组呢? 我已经查找了分段的sieve方法,它们似乎涉及到sqrt(N)findprimes,但我不明白它是如何工作的。 如果N很大(比如10 ^ 18)呢?