草庐IT

algorithm

全部标签

c++ - 计算出保存一个 int 需要多少字节的算法

很抱歉提出这个愚蠢的问题,但我将如何通过数学或使用C++计算出存储一个整数需要多少字节。 最佳答案 如果你的意思是来自informationtheory的观点,那么简单的答案是:log(number)/log(2)(它们是自然数、二进制数还是普通数都无关紧要logarithms,因为除以log(2),它计算以2.)这会报告存储您的号码所需的位数。如果您对在特定语言或环境中有效或通常编码您的数字需要多少内存感兴趣,您需要做有些研究。:)整数的典型C和C++范围是:char1byteshort2bytesint4byteslong8by

c++ - knuth 乘法哈希

这是Knuth乘法哈希的正确实现吗。inthash(intv){v*=2654435761;returnv>>32;}乘法溢出会影响算法吗?如何提高该方法的性能? 最佳答案 Knuth乘法哈希用于根据整数k计算{0,1,2,...,2^p-1}中的哈希值。假设p在0到32之间,算法是这样的:将alpha计算为最接近2^32(-1+sqrt(5))/2的整数。我们得到alpha=2654435769。计算k*alpha并将结果对2^32求模:k*alpha=n0*2^32+n1其中0保留n1的最高p位:n1=m1*2^(32-p)+m

algorithm - 3D 中点 A 是否靠近点 B - 距离检查

我正在寻找一种有效的算法来检查一个点是否在3D中的另一个点附近。sqrt((x2-x1)^2+(y2-y1)^2+(z2-z1)^2)这似乎并不太快,实际上我不需要这么大的精度。我还能怎么做? 最佳答案 对距离求平方,并放弃对sqrt()的调用,这样会快得多:(((x2-x1)^2+(y2-y1)^2+(z2-z1)^2当然,在许多情况下,至少可以提前计算出radius*radius并存储为例如squaredRadius。 关于algorithm-3D中点A是否靠近点B-距离检查,我们在

c++ - 冒泡排序擅长什么?

这个问题在这里已经有了答案:关闭12年前。PossibleDuplicate:Whatisabubblesortgoodfor?我敢肯定每种算法都有其优点和缺点,那么与其他排序算法相比,冒泡排序又如何呢?(当然我希望答案不是“好学”)

c++ - 检查二进制数在特定位置是否有 '0' 或 '1'

我想检查二进制数在特定位置是否有“0”或“1”。例子:如果二进制数是:101000100检查位置零(即最右边的“0”)应该导致“0”。检查位置2的结果应该是在“1”中。检查位置3的结果应该是在“0”。检查位置6应该会产生在“1”中。等...我正在用C编写代码,所以显然我可以使用sprintf/scanf等,但我想一定有更好的东西(阅读:更省时/更容易)!执行此操作的良好机制是什么? 最佳答案 这将过滤掉您正在寻找的位:number&(1如果你真的需要1或0的响应,你可以使用它来使它成为一个bool值:!!(number&(1或者更好

c++ - 对于复杂的问题解决练习(例如图形),哪种语言(C++ 或 Python)更好?

我正在尝试解决一些问题和算法。我知道C++,但一位friend告诉我,如果使用Python会更好。因为它会更快开发并且花在编程细节上的时间更少实际上并没有明智地获得任何解决方案。编辑2:我计划使用来自Google-codes的python-graph库,如果您使用过,请提供示例代码。编辑1:更快-更少的时间和更少的工作来编写解决方案谢谢大家的帮助! 最佳答案 我认为您正在寻找Python,因为您可以:专注于算法本身,不必担心内存管理等其他细节。用更少的代码做更多的事情语法几乎就像使用伪代码一样。对列表、元组、列表理解等有很好的内置语

c++ - 将数字求和到 N 的最快算法

很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visitthehelpcenter.关闭10年前。我想要一个真正快速的C算法或代码来完成以下任务:对任何给定整数N从1到N的所有数字求和,而不假设N为正数。我做了一个从1到N求和的循环,但是太慢了。

c++ - N选K、K-N、K-2N等,递归中递归

我知道如何使用递归来生成所有可能的组合,即N选择K。但是如何创建所有可能的N/K组K?N当然总是可以被K整除。澄清一下:例如,如果N是20,K是4,那么我想生成所有可能的五组四。如果,比方说,N包含1,2,3...20而K是4,那么这样的分组是{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16},{17,18,19,20}。假设N比较小,递归可行我觉得这是一个递归中的递归问题,因为生成所有可能的单组四(又名N选择K)需要递归,然后生成下一组四变成N-4选择K,然后下一个N-8选择K,等等。但是我在实现这个时遇到了问题...有什么帮助吗?

c++ - 如何根据一本书的段落创建思维导图

今天我尝试编写一个程序,该程序将接收一段文本并创建一个图表来显示不同单词之间的关系。一切顺利,除了我不知道如何以更好的方式找出联系。更好的方法意味着类似于思维导图。这是一个简单的输入,但我想创建一个程序,可以从维基百科中获取一段并给出一个非常好的思维导图。对于以下输入,我从我的程序的点格式输出中得到的图表是rosesareredline_endskyisblueline_endlifeisbeautifulline_endeverythingisgoingfineline_endfile_end但对于像这样的输入,它只会创建一个比文本本身更模糊的非常大的图形。Probabilityis

c++ - 以每个元素等于两个数字的最小和的方式填充数组,使得

给定一个数组(仅包含正数整数)已经有前k个元素:a1,a2,....ak。我需要填充剩余的(n-k)元素(数组总共有n元素)。n的值约为10^3和1。每个ai的值是两个数字的最小和,使得这两个数字的位置之和等于i。这是伪代码(我的算法):fori=k+1tona[i]=max_valueforj=1to(i/2)a[i]=min(a[i],a[j]+a[i-j])时间复杂度:O(n^2)问题:有没有其他方法可以更快地做到这一点?我正在寻找可以在小于O(n)的时间内找到每个ai的值的任何数据结构或算法。P/S:这是我程序中的一个过程,所以我需要尽快完成。 最佳