草庐IT

algorithm

全部标签

c++ - 在相同的输入迭代器范围内并排运行两个 <algorithm>

如果我想计算从std::istream中检索到的一堆数字的总和,我可以执行以下操作://std::istream&is=...inttotal=std::accumulate(std::istream_iterator(is),std::istream_iterator(),0);但是,如果我想计算它们的平均值,我需要累加两个不同的结果:总和(std::accumulate)总计数(std::distance)有什么方法可以“合并”这两种算法并在迭代器范围的一次传递中“并排”运行它们吗?我想做类似的事情:usingstd::placeholders;inttotal,count;std

c++ - 加权中位数计算

我正在寻找有关计算加权中值算法和/或C++示例代码的良好学习Material。我的中位数权重是0到1之间的值。你能给我推荐一些链接吗? 最佳答案 加权中位数定义如下:如果x是N的排序数组元素,和w是权重数组,总权重W,那么加权中位数就是最后一个x[i]这样w[i]的总和并且所有先前的权重都小于或等于S/2.在C++中,这可以这样表达(假设x、w和W定义如上)doublesum=0;inti;for(i=0;iW/2)break;}doublemedian=x[i-1];编辑看来我回答这个问题太仓促了,还犯了一些错误。我从Rdocum

c++ - 计数位数 : How does this line work ? n=n&(n-1);

这个问题在这里已经有了答案:n&(n-1)whatdoesthisexpressiondo?[duplicate](4个答案)关闭6年前。我需要一些解释这个特定行是如何工作的。我知道这个函数计算的是1的位数,但是这一行究竟是如何清除最右边的1位的呢?intf(intn){intc;for(c=0;n!=0;++c)n=n&(n-1);returnc;}有没有人可以简单的给我解释一下或者给出一些“证明”?

c++ - 在数组中找到两个总和为 k 的元素

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:Giventwoarraysaandb.Findallpairsofelements(a1,b1)suchthata1belongstoArrayAandb1belongstoArrayBwhosesuma1+b1=k.给定:一个未排序的整数数组A输入:一个整数k输出:所有两个元素集合,每个集合中的元素总和等于k,复杂度为O(n)。示例:A={3,4,5,1,4,2}输入:6输出:{3,3},{5,1},{4,2}注意:我知道一个复杂度为O(nlogn)的解决方案,但这需要对数组进行排序。有什么方法可以在O(

c++ - 算法 C/C++ : Fastest way to compute (2^n)%d with a n and d 32 or 64 bit integers

我正在寻找一种算法,允许我使用n和d32或64位整数计算(2^n)%d>.问题是即使使用多精度库也不可能将2^n存储在内存中,但也许存在计算(2^n)%d的技巧仅使用32位或64位整数。非常感谢。 最佳答案 看看ModularExponentiationalgorithm.这个想法不是计算2^n。相反,您可以在加电时多次降低模数d。Thatkeepsthenumbersmall.将方法与ExponentiationbySquaring结合起来,并且您可以仅在O(log(n))步内计算(2^n)%d。这是一个小例子:2^130%123

c++ - 比较 unordered_map 与 unordered_set

首先,它们之间的主要区别是什么?我唯一发现的是unordered_set没有运算符[]。我应该如何访问unordered_set中的元素,因为没有[]?哪个容器使用随机访问内存(或两者)?哪一个在任何意义上都更快或使用更少的内存? 最佳答案 它们几乎完全相同。unordered_set只包含键,没有值。没有从键到值的映射,因此不需要operator[]。unordered_map将键映射到值。您可以使用unordered_set中的各种find方法来定位事物。 关于c++-比较unord

c++ - 在给定时间内将频率从 f1 缓慢上升到 f2 的正弦波

我正在编写一个c程序来生成一个正弦波,该正弦波在给定的时间间隔内将频率从f1缓慢上升到f2。我已经编写了这个c程序来将频率从0赫兹斜升到10赫兹,但问题是频率在完成360度后会发生变化。如果我尝试在0到360度之间改变频率,那么过渡并不平滑而且很突然。这是我使用的方程y=Amplitude*sin(freq*phase)intmain(intargc,char*argv[]){doubley,freq,phase;intcount;//forconvenienceofplottinginmatlabsoallthewavesarespreadonxaxis.for(freq=0;fre

c++ - STL 的发现背后的算法是什么?

我刚刚为map中的字符串创建了一个自定义查找函数。我开发了某种线性搜索算法(后来才知道),但对该函数的速度不满意。所以我搜索了一个更快的函数,找到了map自己的函数:ma​​p::find。这比我使用的线性算法快得令人难以置信。在另一个示例中,STL的函数find也比我正在使用的另一个线性函数快得多。但这怎么可能呢?如果您使用二进制搜索算法,您需要首先对map进行排序,这将花费(假设)更多的时间,您的map越大。还有如何找出那些核心功能背后的算法?是否有列表或某种数据库可以查明这一点?感谢您的所有回答!我对最佳答案投了赞成票并接受了MaxLybbert的答案,因为它是最详细的答案。保罗

c++ - 以 3 函数的中位数进行的比较次数?

截至目前,我的函数找到3个数字的中位数并对它们进行排序,但它总是进行3次比较。我在想我可以在某处使用嵌套的if语句,这样有时我的函数只会进行两次比较。intmedian_of_3(intlist[],intp,intr){intmedian=(p+r)/2;if(list[p]>list[r])exchange(list,p,r);if(list[p]>list[median])exchange(list,p,median);if(list[r]>list[median])exchange(list,r,median);comparisons+=3;//3comparisonsfore

c++ - 找出特定整数有多少个二进制数字

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Computefastlogbase2ceiling在C/C++中从十进制转换为二进制时,找出特定整数有多少二进制数字的最快方法是什么?例。47(10)=101111(2)所以47有6位二进制表示。