草庐IT

c++ - 随机排列中第 n 项的高效计算

想象一下,我能够使用诸如Knuth洗牌之类的方法和使用key播种的种子随机数生成器来洗牌0到2^32之间的所有数字。从概念上讲,我需要两个数组(使用Z5而不是Z232为简洁起见):[2,0,1,4,3]//perm[1,2,0,4,3]//inv===p^-1如果我有这些数组,我可以高效地查找排列中的第n个元素,并找出purmutation值v中的元素;v=perm[n];n==inv[v];//true我不想存储两个16GB的uint数组来表示这个打乱后的集合,因为我对整个打乱后的序列在任何时候都不感兴趣。我只对第n个元素的值感兴趣。理想情况下,我想编写两个像这样工作的纯函数:uin

c++ - 用 uint8_t 或 char 来表示按字节排列的二进制数据哪个更好?

我喜欢uint8_t,因为我觉得它的意图(二进制数据,而不是字符)表达得更好。但是,有许多我可能想要调用的基于字符的I/O函数。只是想知道是否有人们遵守的最佳实践?这是我第一次涉足字节级I/O。 最佳答案 char的问题是它可能是有符号类型(范围至少为-127..+127)或无符号类型(范围至少为0..255)。unsignedchar比普通的好char用于面向二进制字节的数据。uint8_t,如果存在,将具有与unsignedchar相同的范围和表示形式,并且可能只是同一类型的另一个名称。请注意,C++(如C)将字节定义为给定系统

c++ - 如何在不使用递归的情况下找到字符串的所有排列?

谁能帮我解决这个问题:这是一个查找任意长度字符串的所有排列的程序。需要相同的非递归形式。(最好是C语言实现)usingnamespacestd;stringswtch(stringtopermute,intx,inty){stringnewstring=topermute;newstring[x]=newstring[y];newstring[y]=topermute[x];//avoidstempvariablereturnnewstring;}voidpermute(stringtopermute,intplace){if(place==topermute.length()-1){

c++ - 有没有实现排列操作的C++类?

是否有C++模板类实现了置换和置换群的操作?该类必须实现求积、求逆、乘法等。 最佳答案 我不知道一个,但它应该很容易实现。在内部,您可以将排列表示为vector,例如(1342756)是1-7发送1->1、2->3、3->4、4->2等的烫发,或者作为一组循环,例如(1)(234)(576),并根据这些执行操作。据推测,模板参数将是置换组的大小。 关于c++-有没有实现排列操作的C++类?,我们在StackOverflow上找到一个类似的问题: https:/

c++ - 类模板,它独立于其参数的排列

考虑如下定义的类模板和辅助枚举类:enumclassColor{Red,Green,Blue}enumclassShowAxes{False,True}enumclassShowLabels{False,True}templateclassA{......};问题是,如何重新定义类A,这将独立于其参数的排列。我使用支持C++11的DevC++。[编辑]比如A的新版本应该支持AAAAAA版本,它们都是相同的,即它们生成相同的类。 最佳答案 使用非类型参数的当前接口(interface)是不可能的。您可以改为采用类型参数并将值包装在st

c++ - 在 C++ 中生成 N 选择 K 排列

这个问题在这里已经有了答案:ImplementationofPermutation,CombinationsandPowerSetinC++[duplicate](2个答案)关闭7年前。我有一个函数接收n和k以创建n选择k的所有可能排列,虽然它适用于大多数组合,如5选择3或3选择2,但不适用于其他组合,如4选择2.我需要一些帮助来查找和理解错误。感谢您的关注。函数:voidPermGenerator(intn,intk){intd[]={1,2,3,4,5,6,7,8,9};sort(d,d+n);cout我正在使用next_permutation函数。cplusplus当我尝试4选2

c++ - 给定一个字符串,找到它在字典中的所有排列

这是一道面试题:Givenastring,findallitspermutationsthatareawordindictionary.我的解决方案:将字典中的所有单词放入后缀树中,然后在树中搜索字符串的每个排列。搜索时间是O(n),其中n是字符串的大小。但是字符串可能有n!排列。如何提高效率? 最佳答案 您的一般方法还不错。但是,您可以通过重新排列单词使其所有字符按字母顺序排列,然后在字典中搜索,其中每个单词都按字母顺序类似地重新排列并映射到原始单词,从而避免搜索每个排列.我意识到这可能有点难以理解,所以这里有一个例子。说你的话是

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++ - 电话号码中字母和数字的排列

对于我的计算机科学课,我们需要编写一个程序(使用C++),它接受字符输入并根据电话上的拨号盘输出可能的排列,留下非数字字符。例如输入2个输出2,A,B,C。输入23个输出23,A3,B3,C3,2D,2E,2F,AD,AE,AF,BD,BE,BF等...为此程序提供的应用程序正在查找给定电话号码的“虚荣”电话号码的排列。目前,我编写的程序甚至无法编译,恐怕我使用的算法不正确:#include#include#includeusingnamespacestd;//PrototypesvoidinitLetterMap(multimap&lmap);voidshowPermutations

c++ - 部分排列

我有以下用于输出部分组合的递归函数:voidcomb(stringsofar,stringrest,intn){stringsubstring;if(n==0)cout这样调用:comb("","abcde",3);部分组合是指它使用n个选择和r个元素(而不是n个选择,n个元素)。但是,我想考虑元素的顺序(即排列)。我可以找到许多完整排列的算法,但不是部分排列。 最佳答案 是时候进行性能现实检查了。如果您只对一次访问5件事3的排列感兴趣,请立即停止阅读,因为访问次数太少以至于无关紧要(除非您可能正在这样做十亿次)。但是如果您需要访问