Tag: algorithm

C ++:舍入到数字的最接近的倍数

好的 – 我几乎不好意思在这里发帖(如果有人投票结束,我会删除),因为这似乎是一个基本的问题。 这是正确的方法,以C ++中的一个数字的倍数? 我知道还有其他相关的问题,但我特别想知道什么是最好的方式来做到这一点在C + +: int roundUp(int numToRound, int multiple) { if(multiple == 0) { return numToRound; } int roundDown = ( (int) (numToRound) / multiple) * multiple; int roundUp = roundDown + multiple; int roundCalc = roundUp; return (roundCalc); } 更新:对不起,我可能没有打算清楚。 这里有些例子: roundUp(7, 100) //return 100 roundUp(117, 100) //return 200 roundUp(477, […]

生成一组置换(最有效)

我想生成一个集合(集合)的所有排列,如下所示: Collection: 1, 2, 3 Permutations: {1, 2, 3} {1, 3, 2} {2, 1, 3} {2, 3, 1} {3, 1, 2} {3, 2, 1} 一般来说,这不是一个“如何”的问题,而是关于如何最有效的问题。 另外,我不想生成所有的排列并返回它们,但是一次只产生一个排列,并且只在必要时才继续排列(就像迭代器一样 – 我也试过了,但是结果却less了有效)。 我已经testing了很多algorithm和方法,并提出了这个代码,这是我尝试过的最有效的代码: public static bool NextPermutation<T>(T[] elements) where T : IComparable<T> { // More efficient to have a variable instead of accessing a property var count = elements.Length; […]

什么是好的散列函数?

什么是一个好的哈希函数? 我在大学的数据结构课程中看到了很多散列函数和应用程序,但是我大部分都知道要做一个好的散列函数是相当困难的。 作为避免碰撞的经验法则,我的教授说: function Hash(key) return key mod PrimeNumber end (mod是C和类似语言中的%运算符) 质数是散列表的大小。 我觉得这是一个比较好的避免碰撞和快速的function,但是我怎样才能做出更好的? string键对数字键有更好的散列函数吗?

数以百万计的3D点:如何find最接近给定点的10个点?

3-d中的点由(x,y,z)定义。 (X,Y,Z)和(x,y,z)之间的距离d是d = Sqrt [(Xx)^ 2 +(Yy)^ 2 +(Zz)^ 2]。 现在文件中有一百万个条目,每个条目都是空间中的某个点,没有特定的顺序。 给定任何点(a,b,c)find最接近的10点。 你将如何存储百万分,你将如何从这个数据结构中检索这10个点。

约翰·卡马克(John Carmack)的不寻常的快速反平方根(Quake III)

John Carmack在Quake III源代码中有一个特殊的function,它可以计算浮点的平方根,比常规(float)(1.0/sqrt(x))快4倍,包括一个奇怪的0x5f3759df常量。 请参阅下面的代码。 有人可以一行一行地解释这里究竟发生了什么,为什么这个工作比常规的实现要快得多? float Q_rsqrt( float number ) { long i; float x2, y; const float threehalfs = 1.5F; x2 = number * 0.5F; y = number; i = * ( long * ) &y; i = 0x5f3759df – ( i >> 1 ); y = * ( float * ) &i; y […]

algorithm来生成一个填字游戏

给出一个单词列表,你将如何去安排他们到填字游戏网格? 它不必像是一个对称或类似的“适当的”纵横字谜:基本上只是输出每个单词的起始位置和方向。 会有Java的例子吗?

Eratosthenes素数比同时更快?

我目前正在编写一个程序,首先依次由Eratosthenes Sieve生成素数,然后同时进行。 该algorithm的并发版本应该比顺序版本更快,但在我的情况下,并发版本是约。 慢了10倍 我想知道我在哪里把额外的工作放在我的线程上,而不是顺序解决scheme中的主线程。 这是我的程序(准备阅读一下!): Primes.java : public abstract class Primes { byte[] bitArr; int maxNum; final int[] BITMASK = { 1, 2, 4, 8, 16, 32, 64 }; final int[] BITMASK2 = { 255 – 1, 255 – 2, 255 – 4, 255 – 8, 255 – 16, 255 – 32, 255 – […]

如何光栅化旋转的矩形(2d由setpixel)

我有四个2d顶点ABCD旋转矩形,我需要栅格化/绘制(有效地)在pixelbufer setpixel(x,y,颜色) 怎么做? 我正在尝试一些代码 // convertilg abcd do up down left right, // calculating some dx_left dx_right on y– // etc (frustrating on special cases when there are 2 up_y vertices in same line etc) for(;;) { drawhorizontalline(y, xstart, xend, color); if(y==downy) break; y–; xstart+=dxstart; xend+=dxend; if(y==lefty) dxstart = dxright; if(y==righty) dxend = dxleft; } […]

什么是2048年游戏的最佳algorithm?

我最近偶然发现了2048年的比赛。 通过在四个方向中的任何一个方向移动它们来合并类似的瓷砖,以制作“更大”的瓷砖。 在每次移动之后,随机出现一个新的图块,其值为2或4 。 当所有的方块都被填满并且没有可以合并方块的移动时,游戏就会终止,或者你创build一个值为2048的方块。 一,我需要遵循一个明确的策略来实现目标。 所以,我想为它写一个程序。 我目前的algorithm: while (!game_over) { for each possible move: count_no_of_merges_for_2-tiles and 4-tiles choose the move with a large number of merges } 我所做的是在任何时候,我会尝试将瓦片与值2和4合并,即尽可能最小化2和4瓦片。 如果我以这种方式尝试,所有其他瓷砖自动合并,战略似乎不错。 但是,当我实际使用这个algorithm时,在游戏结束之前我只能得到4000点左右。 AFAIK的最大分数略高于20,000分,比我现在的分数还要大。 有没有比上述更好的algorithm?

带数组结构的数组

我有string: Main.Sub.SubOfSub 而某种数据,可能是一个string: SuperData 我怎么能把它全部转换到这个数组上面? Array ( [Main] => Array ( [Sub] => Array ( [SubOfSub] => SuperData ) ) ) 感谢您的帮助,PK