草庐IT

algorithm

全部标签

C++ - 关于多线程的问题

我无法理解多线程的一些概念。我知道基本原理,但无法理解内核何时发送和使用各个线程。我知道拥有多个线程可以让代码并行运行。我认为这将是我的存档提取程序的一个很好的补充,它可以使用多核解压缩block。它在一个for循环中解压缩所有文件,我希望每个可用的内核都能处理一个文件。这是我的问题:我是否需要查询甚至考虑机器上的核心数,或者当线程运行时,它们会自动发送到空闲核心?谁能给我一个使用线程的for循环的例子。说在每个循环迭代中它会调用一个使用不同线程的函数。我读到要激活的理想线程数是核心数。我如何知道内核何时空闲,或者我是否应该检查它是否已加入主线程,并在它必须保持一定数量的线程运行时创建

c++ - C++中的合并排序实现

我正在学习如何在C++中实现归并排序,遇到了以下问题。这是我的合并函数,它将两个排序数组合并为一个排序数组。voidmerge(int*list,int*final,intstart,intmid,intstop){inth=start;inti=start;intj=mid+1;while((hmid){for(intk=j;k在任何时候,我使用CODEA或CODEB。当我使用CODEA时,函数按预期执行。但是,当我使用CODEB时,函数会用随机数据填充数组列表。printArray是一个打印数组、列表的自定义函数。在对一组数字{4,2,6,9}进行排序时,我从printArray函

c++ - N 位 x 包含 L 个 1

是否有任何快速算法可以存储包含L位1的所有各种N位数字?提供了N和L参数。它用于在类里面破解密码系统,我注意到通过两次定时攻击我可以找出位长度(N)和1位的数量(L)。与其暴力强制所有值介于下限和上限之间,我宁愿最小化我需要测试的元素。因此,我正在考虑拥有一个包含所有元素的vector,它可能适合我从2次计时攻击中获得的信息。任何提示都将不胜感激。我正在使用C++。 最佳答案 BitTwiddlingHacks页面显示了如何使用每个生成的数字的O(1)工作来枚举所有精确设置n位的二进制数。他们的解决方案转载于此:Supposeweh

c++ - MaxDoubleSliceSum Codility 算法

我在CodilityLessons上偶然发现了这个问题,这里是描述:给定一个由N个整数组成的非空零索引数组A。满足0≤Xdoubleslice(X,Y,Z)的总和是A[X+1]+A[X+2]+...+A[Y−1]+A[Y+1]+A[Y+2]+...+A[Z−1].例如,数组A这样:A[0]=3A[1]=2A[2]=6A[3]=-1A[4]=4A[5]=5A[6]=-1A[7]=2包含以下示例双切片:doubleslice(0,3,6),和为2+6+4+5=17,doubleslice(0,3,7),和为2+6+4+5−1=16,doubleslice(3,4,5),和为0。目标是找到任

c++ - 如果可能的话制作一个序列

关闭。这个问题需要更多focused.它目前不接受答案。想改进这个问题吗?更新问题,使其只关注一个问题editingthispost.关闭8年前。Improvethisquestion如果此序列中任意两个连续数字之间的差为-1或1且其第一个元素为0,则整数序列为单序列。更准确地说:a1,a2,...,an是单序列如果:Foranyk(1≤k给定n和s─a中所有元素的总和。W需要构造一个给定参数的单序列。比如如果n=8和s=4那么这样的序列之一是[01210-101]。请注意,如果对于给定的n和s我们不能形成这样的序列,那么我们也需要告诉它这是不可能的。否则我们需要告诉任何这样一个序列。

c++ - 图通常是如何定义的?

我看到一个面试题的图结构定义为:structNode{vectorneighbors;}我认为这很不寻常,或者可能是一个错误,因为节点之间没有什么可以真正区分的。我的推理是否正确,或者是否可以仅使用邻居vector来正确定义图形?我在想我们必须有这样的东西:templatestructNode{Tvalue;vectorneighbors;}这对我来说直觉上更有意义。是否有任何“典型”的方式来定义图形?例如,对于二叉树,我们(至少)有一个值,加上左指针和右指针。使用链表,我们(至少)有一个值和一个下一个指针等。 最佳答案 这是表示图

c++ - 置换算法 C++

我尝试翻译一种算法,该算法在C++中生成n中k的所有排列:publicvoidcalculerEquipeTOT(ArrayListL,ArrayListF,intk){if(k==0){if(calculerPointsTOT(L)>this.pointsMeilleureEquipe){this.meilleureEquipe=L;this.pointsMeilleureEquipe=calculerPointsTOT(meilleureEquipe);}}else{for(Nageurx:F){ArrayListG=newArrayList(F);G.remove(G.index

c++ - 有没有办法到达最后的盒子 - GRAPH

存在问题:第一个人“g”(第一个开始的人)必须到达最后一个盒子“e”,这样第二个人“l”(无论何时)都无法catch第一个人。男人可以左、右、上、下或留下。例如:Input:67RRRRRRRR_e___RR_____RR_RRR_RR_gRl_RRRRRRRR答案是"is",因为有路(左、上、上、上、右)。如何实现这个问题?我正在使用BFS和DFS。这是我的代码#include#include#include#include#include#include#includeusingnamespacestd;constintMAX=32;chara[MAX][MAX];intused[

c++ - 返回第 n 个斐波那契数的快速递归函数

谁能解释一下下面的代码是如何工作的。该代码作为返回第n个斐波那契数的函数的快速递归实现给出。我对递归函数的工作原理有一个大概的了解。我可以完全理解这种函数的直接递归实现,使用斐波那契数的定义,但是效率不高。我无法理解的主要问题是当我们在prev0中存储垃圾时fib(n–1,prev0)返回什么。intfib(intn,int&prev1){if(n我是初学者,所以请尽可能具体。 最佳答案 您可能错过了这个函数返回两个结果的事实:一个作为其返回值,一个在通过引用传递的“输入”参数中。fib的简单递归定义的严重低效之处在于,在每个递归级

c++ - 我有一个 STL vector 列表,我想按每个 vector 的第一个元素对它们进行排序

我有一个来自STL的vector列表。它们有不同的长度,我想按每个vector的第一个元素对它们进行排序。例如,我有vector:445610、18、223和3179.第一个数字是每个vector的大小,后面是vector的元素。我想在文件中显示vector,按第一个元素排序。在此示例中,我的vector应按以下顺序显示:3179,223,445610and18.这是我的代码:ofstreamfout("retele.out");fout“T”是vector的数量。“排序”函数用于对每个vector进行排序,我还需要另一种排序方法来对vector进行排序,正如我刚才所描述的那样。