关于flag布尔数组标记 和 set 标记 的一些想法
来源:互联网 发布:ps嘴唇上色数据 编辑:程序博客网 时间:2024/06/05 01:03
关于flag布尔数组标记 和 set 标记 的一些想法
1、当只做整体标记时,即测试本组数据时不用重置。
1) 如果 需要标记的东西不是很大,且能够用flag数组的下标来存储状态信息,则用flag数组 无论是空间复杂度还是时间复杂度都会更优越些,毕竟set查询是O(logn)的而flag数组是O(1) 的,并且由于封装出set所以带的功能比较多,需要的内存要多一些也属正常。
比如 http://codeforces.com/problemset/problem/699/D 这题。
全用flag布尔数组,
源码 http://codeforces.com/contest/699/submission/20972041
时间 561 ms
内存 7420KB
而如果纯用set做标记,
源码 http://codeforces.com/contest/699/submission/20973614
时间 873 ms
内存 19604KB
2) 如果 需要标记的东西很大,不能够用flag数组的下标来存储状态信息,则只能用 set 或 map 了。
2、当只作局部标记,即测试本组数据时有很多次重置。
flag数组不断地用memset重置要浪费大量的时间去重置没有使用过的地方,
故,如果不能在 回溯等过程中直接对使用过的地方逐一重置,则用 set 或map 更好,否则可以用 flag布尔数组。
3、此外 1)当要标记的东西不能够用flag数组的下标来存储状态信息 比如很多long long int的整型数,或者直接对string 或其它类类型进行标记,一般就用 set 或者 map 标记了
2)当要标记的东西很离散时,建议用set 或者 map,这样不用浪费太多内存 。
参考资料 《C++ Primer 5th》、Codeforces 等
2016-09-29 00:52:20
------from ProLights
- 关于flag布尔数组标记 和 set 标记 的一些想法
- 关于web.config的使用和一些常用标记.
- 一个”flag“标记的小应用
- TCP FLAG 标记
- TCP FLAG 标记
- TCP FLAG 标记
- 控制标记 flag
- DiretX的一些标记
- html的一些标记
- MyBatis动态SQL之 set 和 trim标记的使用
- MyBatis动态SQL之 set 和 trim标记的使用
- 《标记》-Spring的一些偏方
- 关于消息标记的使用?
- 关于PHP5的短标记
- 关于jsf 的标记库
- 关于“(”:“::”右边的非法标记
- 利用穷举法和函数(用到标记flag)求出100--150之间的素数以及用标记求出100之内的素数
- 和标记
- 多线程系列(三)---synchronized其他概念
- python技巧(2):--python cookbook学习笔记
- linux内核4.2.x实现自定义系统调用
- Hello world!
- 洛谷 3144
- 关于flag布尔数组标记 和 set 标记 的一些想法
- 45.Maximum Subarray Difference-最大子数组差(中等题)
- POJ 3277 线段树+扫描线
- 全组合
- 【Linux 系统编程】常用的一些基本命令
- 什么是超参数
- POJ 2528 线段树
- 51nod 1456【强连通,缩点,并查集】
- 超全!整理常用的iOS第三方资源