草庐IT

algorithm

全部标签

c++ - 位操作 : keeping the common part at the left of the last different bit

考虑两个用二进制写的数字(左边是MSB):X=x7x6x5x4x3x2x1x0和Y=y7y6y5y4y3y2y1y0这些数字可以有任意位数,但都是同一类型。现在考虑x7==y7、x6==y6、x5==y5,但是x4!=y4。如何计算:Z=x7x6x500000或者换句话说,如何有效地计算一个数字,使公共(public)部分保持在最后一个不同位的左侧?templateinlineTf(constTx,constTy){//Somethinghere}例如,对于:x=10100101y=10110010它应该返回z=10100000注意:这是为了super计算的目的,这个操作将被执行数千亿

c++ - 使用 STL 算法重写的指针的循环示例,没有循环?

例如,我将如何重写下面的代码,使用没有循环的STL算法?vectorpizzaBox;intbiggestSlice=0;for(int*p=&pizzaBox[0];p!=pizzaBox[pizzaBox.size()];p++){if(*p>biggestSlice)biggestSlice=*p;} 最佳答案 假设您实际上是指vector,并在更正循环结束条件后,您可以使用max_element算法在这里:intbiggestSlice=*max_element(pizzaBox.begin(),pizzaBox.end()

c++ - C++中MD5的快速实现

首先,要明确一点,我知道C++中存在大量MD5实现。这里的问题是我想知道是否比较哪个实现比其他实现更快。由于我在大小大于10GB的文件上使用此MD5哈希函数,因此速度确实是这里的主要问题。 最佳答案 我认为avakar试图表达的观点是:在现代处理能力下,硬盘驱动器的IO速度是瓶颈,而不是哈希计算。获得更高效的算法对您没有帮助,因为这不是(可能)最慢的点。如果您正在做任何特殊的事情(例如1000轮),那么它可能会有所不同,但如果您只是计算文件的哈希值。您需要加快IO,而不是数学。 关于c+

c# - 2d-bin-packing 将矩形放置在 x,y 位置的算法?

关闭。这个问题需要更多focused.它目前不接受答案。想改进这个问题吗?更新问题,使其只关注一个问题editingthispost.关闭5年前。Improvethisquestion我正在Canvas中实现2d-bin-packing算法。我的任务是尽可能将矩形放置在Canvas上。下面展示了如何做到这一点:http://incise.org/2d-bin-packing-with-javascript-and-canvas.html但是,它从原点开始。我想告诉算法在哪里放置一个矩形,下一个不要放在他上面。代码中应该更改什么?是否有其他算法可用于它?

c++ - 值是如何返回的? - 递归算法

我无法理解这个简单的递归算法是如何返回值的。算法如下:intfib(intn){if(n我想知道输入5到这个函数是如何返回5的?我知道第五个斐波那契数是5,所以这是正确的答案,但我不确定这个答案是如何从上面的代码中推导出来的.前五个斐波那契数:11235。根据我有限的理解,我认为将5传递给此函数将返回7。这是因为5-1=4和5-2=3。然后将这两个数字相加,我得到简单的整数7。这是否有意义?我敢肯定我已经失去了阅读这篇文章的人,尽管这很简单。如果我正在读这篇文章,我会迷路的。此外,如果我制作一个递归树并显示从5开始对fib的递归调用,我看不到这最终如何返回5,但我确实看到了对函数fib

c++ - 请提出一些算法来找到树中所有节点中到最远节点的距离最小的节点

请提出一些算法来找到树中所有节点中到最远节点的距离最小的节点。它不是图表,也没有加权。 最佳答案 在树T中选择一个任意节点v。运行BFS,使v作为T的根。BFS输出从v到T所有其他节点的距离。现在选择一个距离v最远的节点u。再次运行BFS,使u成为根。在新的距离输出上,找到距离u最远的节点w。考虑u和w之间的路径。这是T树中最长的路径。路径中间的节点是T树的中心。请注意,树中可能存在两个中心。如果是这样,他们就是邻居。性能:O(n),其中n是T的节点数。证明声明:距离some节点v最远的叶子(u)位于最长的路径上.如果我们证明了这一

c++ - 如何使用 CUDA 生成随机排列

我可以使用哪些并行算法从给定的集合中生成随机排列?特别是适合CUDA的论文的建议或链接会很有帮助。这的顺序版本将是Fisher-Yates洗牌。例子:设S={1,2,...,7}为源索引集。目标是并行生成n个随机排列。n个排列中的每一个都恰好包含每个源索引一次,例如{7,6,...,1}。 最佳答案 Fisher-Yatesshuffle可以并行化。例如,4个并发worker只需要3次迭代来洗牌8个元素的vector。在第一次迭代中,它们交换01、23、45、67;第二次迭代02、13、45、67;以及最后一次迭代04、15、26、

c++ - 是否有一种 STL 算法可以根据某种容差查找容器中是否存在元素?

我要解决的问题如下:我有一个浮点容器(双vectorvector):std::vector>dv{{0.0,0.0},{1.0,0.0},{0.0,1.0},{1.0,1.0}};然后,假设我有一个新点(双vector):std::vectorv1{0.0001,1.0};我想根据一些公差检查v1点是否存在于dv容器中。两个vector之间的距离计算为欧氏距离。我查看了相关问题和答案:Howtofindifanitemispresentinastd::vector?checkifastd::vectorcontainsacertainobject?并且还尝试使用std::find_if

c++ - 为什么像 std::is_permutation() 这样的函数本质上不是不安全的?

在过去十年左右的时间里,C和C++程序员因经常未能执行正确的边界检查而遭受打击,尤其是在字符串上。这些故障通常会导致主要软件产品出现严重的安全问题。由于缓冲区溢出的不安全性变得广为人知,建立适当的边界检查的动力使许多程序员远离了传统的缓冲区和字符串操作函数,如strcpy()。和sprintf()至少部分是因为这些函数倾向于通过对目标缓冲区的大小进行假设来引发缓冲区溢出问题。STL类型的优点之一,如std::string和std::vector是他们对缓冲区访问的强大控制。但是有一件事让我很困惑。中许多最广泛使用的功能C++头文件似乎积极地乞求溢出滥用:具体来说,那些采用begin的函

c++ - "Bring all the zeros to the back of the array"面试挑战的良好 C++ 解决方案

我接受了一份Jr.开发工作的面试,他要求我编写一个程序,该程序接受一个整数数组并将零推到后面。这是约束条件(他一开始没有告诉我......就像在编程面试中经常发生的那样,我在解决问题的同时了解了问题的约束条件,哈哈):必须就地进行;不创建临时数组、新数组等。不必保留非零数字的顺序(我希望他一开始就告诉我)设置:intarr[]={0,-2,4,0,19,69};/*Transformarrto{-2,4,19,69,0,0}or{69,4,-2,19,0,0}oranythingthatpushesallthenonzerostothebackandkeepsallthenonzero