草庐IT

algorithm

全部标签

c++ - 将整数集转换为范围

将一组整数转换为一组范围的最惯用的方法是什么?例如给定集合{0,1,2,3,4,7,8,9,11}我想得到{{0,4},{7,9},{11,11}}。假设我们正在从std::set进行转换进入std::vector>.我将Ranges视为包含两边,因为它对我来说更方便,但如果需要,我也可以使用开放式范围。我已经编写了以下功能,但我感觉像是重新发明轮子。请告诉也许在STL中有一些东西或对此有提升。typedefstd::pairRange;voidsetToRanges(conststd::set&indices,std::vector&ranges){Ranger=std::make_

c++ - 压缩字符串存储

假设我有许多对象包含非平凡长度的字符串(大约3-4kb)。这些字符串彼此不同,但同时包含许多共同的部分/子序列。平均而言,任何单个字符串的80-90%也可能包含在其他字符串中。有没有一种简单的方法可以自动利用这种巨大的冗余来压缩数据?理想情况下,解决方案是C++并且对用户透明(即我可以像访问常规只读conststd::string一样使用它,而不是从压缩存储中读取)。 最佳答案 算法上,Lempel–Ziv–Welch为所有对象/字符串使用一个字典可能是一个好的开始。 关于c++-压缩字

c++ - 使用 Qt/C++ 的排序算法 - 对结构的 QList 进行排序

我想知道它们是否是STL或Qt中的某种算法,用于对double数组进行排序并返回原始列表中已排序项的索引。例如。大号=1,2,5,3L_sort=1,2,3,5指数=1,2,4,3这样我之后就可以计算AnotherList[Indices](相对于原始列表L,两个列表中的顺序相同)。最后,我想到了创建一个QList,每个MyStruct包含两个成员,一个是与L中的元素相同类型的LType,另一个是与AnotherList中的元素相同类型的AnotherType。然后根据LType类型的成员进行排序。但是我有这个想法,我不知道如何在Qt中进行。感谢和问候 最佳

c++ - 算法:计算单词列表频率的更好方法

这个问题实际上很简单,但我想在开始编码之前先听听一些想法。给定一个文件,每行都有一个单词,计算出现频率最高的n个数字。不幸的是,我首先想到的是使用std::map。我知道C++的同行们会说unordered_map非常合理。我想知道是否可以在算法方面添加任何内容,或者这基本上只是“谁选择最佳数据结构谁获胜”类型的问题。我在互联网上搜索过它并阅读了哈希表和优先级队列可能会提供一个运行时间为O(n)的算法,但是我认为实现起来会很复杂有什么想法吗? 最佳答案 用于此任务的最佳数据结构是Trie:http://en.wikipedia.or

c++ - 系列的第n项

我们必须找到这个系列的第n项http://oeis.org/A028859n答案应该是模1000000007我已经写了代码,但是当na很大时,时间超过了限制。#includeusingnamespacestdintmain(){longlongintn;cin>>n;longlonginta,b,c;a=1;b=3;inti;for(i=3;i 最佳答案 解决此类问题的标准技术是将其重写为矩阵乘法,然后使用exponentiationbysquaring高效地计算矩阵的幂。在这种情况下:a(n+2)=2a(n+1)+2a(n)a(n

c++ - 任意大小的凸多边形之间的碰撞检测算法

我正在研究小行星克隆。一切都是二维的,用C++编写。对于小行星,我正在生成随机的N边多边形。我保证它们是凸的。然后我旋转它们,给它们一个旋转速度,让它们在太空中飞翔。一切正常,而且非常漂亮。对于碰撞,我使用的是我自己想到的算法。这可能是个坏主意,如果到了紧要关头,我可能会放弃整个事情并在互联网上找到教程。我已经编写并实现了所有内容,并且碰撞检测工作正常......大部分时间。当屏幕上有明显的碰撞时它会随机失败,并且有时在没有任何东西接触时指示碰撞。要么我在某个地方搞砸了我的实现,要么我的算法很糟糕。由于我实现的规模/范围(超过几个源文件),我不想为此打扰你,只是希望有人检查我的算法实际

c++ - 计算相邻盒子的数量

假设我有一组1000个框的(X,Y)坐标。(x1,y1)(x2,y2)Area(0.0000,0.0000)(0.3412,0.4175)0.1424(0.7445,0.0000)(1.0000,0.6553)0.1674(0.7445,0.6553)(1.0000,1.0000)0.0881(0.0000,0.6553)(0.7445,1.0000)0.2566(0.3412,0.0000)(0.7445,0.4175)0.1684(0.3412,0.4175)(0.7445,0.6553)0.0959(0.0000,0.4175)(0.3412,0.6553)0.0812....e

c++ - 从子字符串生成优化字符串的算法

假设我有一个子字符串集合,例如:stringa={"cat","sensitive","ate","energy","tense"}那么输出应该如下:catensesensitivenergy我该怎么做? 最佳答案 这个问题被称为最短常见超弦问题,它是NP-hard问题,因此如果您需要一个精确的解决方案,那么尝试所有可能性并选择最佳解决方案是再好不过的事情了。一种可能的指数解决方案是生成输入字符串的所有排列,为每个排列贪婪地找到最短的公共(public)超串(排列指定字符串的顺序并且可以证明对于固定顺序贪婪算法总是正确工作)并选择最

c++ - 给定一个整数 n,返回它可以表示为 1 和 2 之和的方式的数量

例如:5=1+1+1+1+15=1+1+1+25=1+1+2+15=1+2+1+15=2+1+1+15=1+2+25=2+2+15=2+1+2任何人都可以提供有关如何完成此操作的伪代码的提示。老实说,甚至不知道如何开始。这看起来像一个指数问题,它可以在线性时间内完成吗?谢谢。 最佳答案 在您提供的示例中,加数的顺序很重要。(请参阅示例中的最后两行)。考虑到这一点,答案似乎与斐波那契数列有关。假设F(n)是n可以写成1和2的方式。然后最后添加的是1或2。所以F(n)=F(n-1)+F(n-2)。这些是初始值:F(1)=1(1=1)F(

c++ - 为什么 vector 比 unordered_map 快?

我正在LeetCode上解决一个问题,但还没有人能够解释我的问题。问题是这样的:给定一个任意的赎金票据字符串和另一个包含来自所有杂志的字母的字符串,编写一个函数,如果赎金票据可以从杂志中构造出来,该函数将返回true;否则,它将返回false。杂志字符串中的每个字母只能在您的赎金记录中使用一次。注意:您可能会假设这两个字符串都只包含小写字母。canConstruct("a","b")->falsecanConstruct("aa","ab")->falsecanConstruct("aa","aab")->true我的代码(耗时32毫秒):classSolution{public:bo