- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有适用于 N
的代码对象,然后只返回 some m
的结果指数,基于一些自定义条件。
这是一个可靠的例子(查询字符串 ' '
上的所有 str
字符):-
std::vector<int> reports; //will keep index of ' ' in "str"
for(int i=0;i<N;i++){ // str.size() = "N"
bool condition = str.at(i)==' '; //"str" is string #B
if(condition){ //rarely true
reports.push_back(i);
}
}
//now reports.size() = m
在那些 block 中,我知道 m
总是小于或等于 N
和通常 m << N
.
在现实生活中, block 更复杂,但共享相似的算法:-
//int "N" is a local variable, it is not a constant.
std::vector<Input> inputs;
std::vector<Report> reports; //"Report" is any type of result, actually
int outOfLoopVariable=0;
for(int i=0;i<N;i++){
bool condition = some logic #B about "inputs[i]" and "outOfLoopVariable";
outOfLoopVariable= ....; //some complex logic #B
int var1 = ....; //some complex logic #B
//var2, var3, etc.
if(condition){ //rarely true
reports.push_back(Report(i,var1,var2,...));
}
}
算法#B
总复杂度 = O(N)
,
但是std::vector::push_back
的总复杂度 =
O(m*log(m))
在大多数情况下(当 m<<N
时)O(N*log(N))
在最坏的情况下(当 m~N
时)正如 oLen 所指出的,这是完全错误的。不过,我还是决定留作引用。
(编辑) 算法 #B
需要重新分配 vector
多次。
如何使上述 block 的复杂度为O(N)?
(编辑,感谢oLen)如何避免vector
不必要的内部保留(1->2->4->...)?
多年来,我一直通过以下方法之一解决这个问题:-
reports.reserve(N)
at first statement - 在大多数情况下这是一个过度保留。report
时真的很糟糕是一个大物体并且N
非常大(异形,10000+)。m
. reserve(m)
. reports.push_back(i);
lambda[&]
部分解决,稍微牺牲了可读性)#B
的复杂性现在是O(2*n)
O(1.x*n)
如果我可以省略第一个循环的一些计算。我希望会有更好的方法。
最佳答案
回答:只是不要改变你的代码,不要使用reserve
。
std::vector::push_back
的复杂度是恒定的(考虑到 amortized time )所以你只要使用它就可以了。
关于c++ - std::vector::reserve( unknown m ),我知道 m<<N (通常)并且知道 N,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42185176/
如何在 azure (acs-engine) 中设置保留资源,无需 ssh 集群(仅使用 kubectl 命令)? 最佳答案 使用kubectl使用命令行工具来实现您的目标是不可行的,因为它仅向 ap
我正在尝试在 FreeBSD 机器上启动并运行 Artifactory。我安装了/usr/ports/devel/artifactory,似乎没有问题,然后运行“/usr/local/etc/rc.d
我经常遇到这样的情况,我知道 std::vector 在完成工作后将包含最大数量的元素;让我们说 10000。但是它可以很容易地包含更少的元素,例如 100。无法判断有多少元素得到 .emplaced
我正在做一些测试来测量标准容器在各种条件下的性能,我遇到了一些奇怪的事情。当我在 std::vector 的中间插入许多项目时,如果我首先使用要添加的元素的确切数量调用 reserve,我发现在大多数
这是我正在操作的更新查询。此处错误“set data = :updateValue”,数据是 Dynamo DB 的保留关键字。我想我应该在这里使用 update ExpressionAttribut
假设我们有一个创建并使用可能很大的vector的方法。 已知最大元素数为maxElems。 据我所知,C++ 11的标准实践是: vector fooVec; fooVec.reserve(maxEl
假设我必须编写一个 C 或 C++ 计算密集型函数,该函数有 2 个数组作为输入,一个数组作为输出。如果计算使用 2 个输入数组的频率高于它更新输出数组的频率,我最终会遇到输出数组很少被缓存的情况,因
所附代码包含对 std::vector::assign() 的三个调用。在第一次调用之前,调用 std::vector::reserve() 来分配适当的内存量,然后填充向量。对 allocate()
我认为我可以学习和改进编程的最好方法之一就是查看各种源代码。我正在查看 Blender 的源代码并注意到有关头文件的一些信息。大部分都用过#ifndef包括守卫,其中宏被双下划线包围(例如 __BME
我对这个保留 key 有点困惑,并且案例导致了错误。这是导致错误的示例代码。 var sample = { init: function() { this.sampleFunc
什么时候适合使用string::reserve?我意识到它用于为字符串保留一定数量的字符,但这有什么用呢?如果你过去了,字符串还会调整大小吗?它会提高效率吗? 最佳答案 它将“保留”指定的空间以减少重
有可能已预订或未预订的房间。预订时间为从(日期)到(日期)为止。人员按日期搜索房间:from_field 和til_field。正在尝试查找是否有可用房间。 SELECT rooms.* FROM r
这个问题在这里已经有了答案: Choice between vector::resize() and vector::reserve() (4 个答案) Why can't you access m
我正在尝试将其合并为一个查询。 预订系统有2个表,酒店和预订。 hotels(id, num_rooms) reservations(hotel_id, start_date, end_date) (
我必须为酒店设计和实现预订系统。我有 预订对象的数组列表 房间对象的数组列表 我想在指定日期“预订”房间。 预订没有日期的房间很容易,但日期部分却让事情变得复杂。我正在为此设计而苦苦挣扎,并且有信心朝
正在阅读来自 What are the rules about using an underscore in a c identifier 的答案我偶然发现了以下引文: From the 2003 C
我需要构建一个数据库和服务,我有需要交付给用户的资源。并且交付需要一些时间或需要用户做更多的工作。 这些是我存储信息的表。 Table - Description ________________
BitmapData 有一个名为 Reserved 的属性,它返回一个 32 位 signed integer。 Microsoft 的文档说不要使用此属性。如果我们不应该使用它;那它为什么在那里?它
让我们 std::vector myVec; myVec.reserve(10); 如果我只分配了 5 个元素,我怎样才能重新获得为其他 5 个元素分配的内存? 最佳答案 std::vector v
我正在尝试做这样的事情: #include #include int main() { int l[] = {1,2,3,4}; vector vi(4); copy(l,
我是一名优秀的程序员,十分优秀!