码迷,mamicode.com
首页 > 其他好文 > 详细

基础 2016.4.16

时间:2016-04-16 19:26:59      阅读:129      评论:0      收藏:0      [点我收藏+]

标签:

1、大O记号(big‐O notation)

性质: 常系数可忽略:O(f(n)) = O(c × f(n))
低次项可忽略:O(n^a + n^b) = O(n^a), a > b > 0

技术分享

常数(constant function)
2 = 2010 = 2010*2010 = 20102010 = O(1)
这类算法的效率最高

技术分享

对数 O(logn):lnn | lgn | log100n | log2010n

常底数无所谓
? 常数 a, b > 0,lna / lnb = logab = O(1)
? n > 0 都有 logan = logab × logbn = O(logbn),反之亦然

常数次幂无所谓
? 常数 c > 0,log(n^c) = c × logn = O(logn)

这类算法非常有效
复杂度无限接近于常数

技术分享

技术分享

技术分享

技术分享

技术分享

2、封底估算

技术分享
技术分享

技术分享

3、memset()使用注意

初始化int类型的数组
只能初始化为 -1 和 0

初始化bool类型的数组
只能初始化为 false 和true

初始化char类型的数组
可初始化为任意的ASCII码字符

4、数据类型的取值范围

int -2147483648~2147483647 (-2e+9 ~ 2e+9)

unsigned int 0~4294967295 (0 ~ 4e+9)

long long
-9223372036854775808 ~ 9223372036854775807 (-9e+18 ~ 9e+18)

unsigned long long 0 ~ 18446744073709551615 (0 ~ 1e+19)

__int64
-9223372036854775808 ~ 9223372036854775807 (-9e+18 ~ 9e+18)

unsigned __int64 0 ~ 18446744073709551615 (0 ~ 1e+19)

__int64与long long 都是在32位平台开始使用的64位整数的数据类型,在存储方式和使用方式上没有区别

两者的区别在于,它们命名的发起人不同,支持的平台不同

long long这个数据类型,是UNIX平台发起并支持的
而__int64是微软从win95(VC6)开始发起并支持的

在老的windows开发平台下(如VC6),不识别long long
而老的UNIX,也不识别_int64
当然,现在比较新的平台,两种数据格式和相关的定义、函数都可以兼容了

同样,作为64位整数的printf输出格式定义,也是一样
微软使用的是%I64d
而UNIX使用的是%lld以及%llu(无符号64位)等形式

实际上,无论哪一种,在实际效果上没有不同,只是因为定义者和使用环境造成的支持或不支持的问题

float
只能提供6~7位有效数字
占4字节(32位)内存空间,其数值范围为 |3.4e-38| ~ |3.4e+38|

double
精确度比float高,可提供15~16位有效数字
占8 个字节(64位)内存空间,其数值范围为 |1.7e-308| ~ |1.7e+308|

5、输入输出

请使用 scanf 和 printf 来代替 cin 和 cout,某些情况下后者效率远远远远低于前者

6、Runtime Error

Runtime Error 是指程序在运行过程中出现了问题
通常是内存访问的问题,比如数组下标越界
一般这些问题在小规模测试的时候不会发现,而在 OJ 上大规模数据测试时候就容易暴露出来,所以请自行构造一些数据来调试程序
此外,需要注意的是, main
函数必须以 return 0;结束,如果返回值非 0,也会被认为是 Runtime Error

常见的是除 0 错误 和 内存访问错误

基础 2016.4.16

标签:

原文地址:http://blog.csdn.net/only_air/article/details/51165201

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!