无穷大数 INF
来源:互联网 发布:Windows 10 无线网络 编辑:程序博客网 时间:2024/05/29 18:57
如果我们想要将某个数组清零,我们通常会使用memset(a,0,sizeof(a)),但是当我们想将某个数组全部赋值为无穷大时(例如解决图论问题时邻接矩阵的初始化),就不能使用memset函数了,因为memset是按字节操作的,它能够对数组清零是因为0的每个字节都是0,现在好了,如果我们将无穷大设为0x3f3f3f3f,那么奇迹就发生了,0x3f3f3f3f的每个字节都是0x3f!
所以要把一段整型数组全部置为无穷大,我们只需要 memset(a,INF,sizeof(a))。
#define INF 0x7fffffff
这个数的确是32-bit int的最大值,符号位为0,其他的都是1
但在很多情况下,0x7fffffff会出现错误,比如溢出,这样两个无穷大数相加会变成负数,还有如在做dijkstra求最短路时,当做松弛操作,判断if (d[u]+w[u][v]<d[v]) d[v]=d[u]+w[u][v]时,若u到v没有路劲,w[u][v]=0x7fffffff,这样d[u]+w[u][v]会变成负数,这就产生了错误。
为了尽量避免以上的错误,我们可以改变无穷大的设定,可以将0x3f3f3f3f设为无穷大,0x3f3f3f3f的10进制表示为1061109567,这个数已达到10^9,足以表示无穷大,又0x3f3f3f3f+0x3f3f3f3f=2122219134,满足无穷大+无穷大仍为无穷大
当把无穷大设为0x3f3f3f3f时,在做初始化时也很方便,比如在初始化数组a时,可以使用
Memset(a,0x3f,sizeof(a)),因为0x3f3f3f3f的每个字节都是0x3f,如果使用0x7fffffff,需要循环赋值,耗费更多时间
memset()函数只是稍稍常数小一些而已,其复杂度任然是O(n)的。这一点需要稍稍注意。
- 无穷大数 INF
- c中 无穷大数
- codechef GCD2 无穷大数的最大公约数
- Python 关于正负无穷float(‘inf’)的一些用法
- Python 基础 —— float("inf") 无穷的相关问题
- “一对一”常识推翻百年集论和“没无穷大数”
- 两无穷大数各自位逆转(高地位颠倒)后相加,求和的逆转值
- INF
- inf
- inf
- 无穷量
- 实无穷
- 逍遥无穷
- 无穷饭店
- 无穷级数
- 无穷级数
- 无穷字符串
- 无穷字符串
- 构造函数练习(17/09/24)
- 1024. 科学计数法 (20)--PAT乙级
- hdu 1542 (线段树求矩形面积并)
- c++ 格雷码的生成
- 17ICPC南宁网络赛 A 概率论+阅读理解
- 无穷大数 INF
- 框架漫谈之spring(一)工厂模式实现程序解耦,spring框架的引出
- Oracle expdp impdp导出导入命令及数据库备份
- 队列
- 共轭梯度法
- 有功功率、无功功率、视在功率、功率因数及峰值因子
- php的魔术变量__METHOD__、__FUNCTION、__DIR__、__f
- VMware Tools 安装方法
- mysql索引设计