草庐IT

Algorithm

全部标签

algorithm - 使用一组质数按升序生成整数

我有一组素数,我必须仅使用这些素数按升序生成整数。例如,如果集合是p={2,5}那么我的整数应该是1,2,4,5,8,10,16,20,25,...有没有什么高效的算法可以解决这个问题? 最佳答案 删除一个数字并将它的所有倍数(通过集合中的质数)重新插入优先级队列是错误的(在问题的意义上)-即它生成正确的序列,但效率低下。它在两个方面效率低下-首先,它过度生产序列;其次,每个PriorityQueue操作都会产生额外的成本(操作remove_top和insert通常不是O(1),当然不在任何列表中-或基于树的PriorityQueu

c++ - 获取 UTF-8 编码的 std::string 的实际长度?

我的std::string是utf-8编码的,很明显,str.length()返回了错误的结果。我找到了此信息,但不确定如何使用它来执行此操作:Thefollowingbytesequencesareusedtorepresentacharacter.ThesequencetobeuseddependsontheUCScodenumberofthecharacter:0x00000000-0x0000007F:0xxxxxxx0x00000080-0x000007FF:110xxxxx10xxxxxx0x00000800-0x0000FFFF:1110xxxx10xxxxxx10xxx

c++ - 统计数学问题

我正在开发TexasHold'emhand-rangeequityevaluator,它使用MonteCarlo模拟评估手牌分布。我遇到了两个烦人的问题,我无法给出任何理由。问题#1:简而言之,评估器首先从玩家的手牌分布中挑选手牌。比如说,我们有以下内容:AA-6handsKK-6handsWepickupaboardcardsandafterthat,onehandrandomlyfrombothplayerswhichdoesnotcollidewiththeboardcards.Thegivenexamplegivesthefollowingequities,whichareco

c++ - 如何获得 2-Sat 值

每当我搜索2-Sat的算法时,我都会得到问题的决策形式的算法:是否存在满足所有子句的合法值集。但是,这不允许我轻松找到一组令人满意的bool值。我如何有效地找到满足2-Sat实例的合法值集?我在使用boost库的C++中工作,希望能够轻松集成代码。提前致谢 最佳答案 如果您有一个决策算法来检测是否存在对2-SAT的有效分配,您可以使用它来实际找出实际分配。首先对整个表达式运行2-SAT决策算法。假设它说有一个有效的分配。现在,如果x_1是文字,则将x_1赋值为0。现在计算结果表达式的2-SAT(因此,您必须分配一些其他文字,例如,如

c++ - 对索引值数组进行排序、打包和重新映射,以尽量减少重叠

坐:概览:我有这样的东西:std::vectorvalues;std::vectorindexes;structRange{intfirstElement;//firstelementtobeusedinindexesarrayintnumElements;//numberofelementtobeusedfromindexedarrayintminIndex;/*minimumindexencounteredbetweenfirstElementandfirstElements+numElements*/intmaxIndex;/*maximumindexencounteredbet

c++ - 双数组 Trie 问题

我试图从http://linux.thai.net/~thep/datrie/datrie.html中理解双数组Trie实现但我不明白以下部分。check[base[s]+c]=sbase[s]+c=t这里加c是什么意思。任何人都可以用简单的语言解释算法。 最佳答案 假设您将二维数组折叠成一维数组:intarr2D[2][3];intarr1D[2*3];//#ofrows*#ofcolumns//accesselement[1][2]of2Darray,i.e.,thelastelementintelem2D=arr2D[1][2

c++ - C++去除字符串中连续重复的字符

这是一个字符串问题。首先删除所有重复的长度为1的连续子串,然后删除长度为2的子串,依此类推...例如,如果我们有这样的字符串->abcababceccced删除长度为1的子串后,我们将得到abcababceced删除长度为2的子串后,我们将得到abcabced删除长度为3的子串后,我们将得到abced这将是最终的输出我设计了一个算法,但是它有O(n3)的复杂度,这是不可取的。我的算法如下charstr[20]="abcababceccced";intlen=strlen(a);for(i=1;i如果有人能用C++为这个特定问题提出一个不太复杂的算法,我将不胜感激。

c++ - Boost::graph Dijkstra:最初填充队列

我正在使用boost::graph及其Dijkstra实现。我想计算从一组顶点到另一组顶点的最短路径。我不想计算这些集合之间的所有可能路径。想法如下:我在一栋大楼里,入口在不同的街道上。这样我就可以在这些街道中的任何一条上开始我的旅程。但我只对最短的感兴趣。如果我使用自己的Dijkstra算法实现,我会执行以下操作:对于每个起始节点,距离映射到0将起始节点加入优先队列。虽然使用boost::dijkstra_shortest_paths_no_init很容易将距离图设置为0,但我不知道如何将节点添加到优先级队列。我查看了源代码,这似乎是不可能的。所以我正在考虑定义我自己的Combine

c++ - 用公共(public)部分压缩字符串

我有一个管理大量字符串的应用程序。字符串是一种类似路径的格式,有很多共同的部分,但没有明确的规则。它们不是文件系统上的路径,但可以这样考虑。我显然需要优化内存消耗,但又不能牺牲很大的性能。我正在考虑2个选项:-实现一个compressed_string类来存储压缩数据,但我需要一个固定的字典,我现在找不到一个库。我不想要字节上的霍夫曼,我想要文字上的。-在字符串部分实现某种享元模式。这个问题看起来很常见,我想知道最好的解决方案是什么,或者是否有人知道针对这个问题的库。谢谢 最佳答案 虽然针对您的问题调整特定算法可能很诱人,但这可能需

c++ - 在 CUDA 线程中填充计数 'buckets'

在我的程序中,我通过体素网格跟踪大量粒子。粒子与体素的比例是任意的。在某个时刻,我需要知道哪些粒子位于哪些体素中,以及有多少粒子位于哪些体素中。具体来说,体素必须确切地知道其中包含哪些粒子。由于我不能在CUDA中使用任何类似std::vector的东西,我正在使用以下算法(在高级别):分配一个整数数组,其大小为体素数为所有粒子启动线程,确定每个粒子所在的体素,并在我的“桶”数组中增加适当的计数器分配一个大小为粒子数的指针数组计算每个体素在这个新数组中的偏移量(将其前面的体素中的粒子数相加)将粒子以有序的方式放置在数组中(我使用此数据来加速稍后的操作。速度的提高非常值得增加内存使用量)。