欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

算法笔记2.9补充

程序员文章站 2022-05-10 23:00:39
...
2.9.1 cin与cout

读入多个变量,读入了int 型变量n、double型变量db、char 型变量c、char 型数组str[]:
cin>>n>>db>>C>>str;

如果想要读入一整行,则需要使用getline函数,
把一整行都读入char型数组str[100]:
char str[100] ;
cin.getline(str,100);
而如果是string容器(6章会介绍),则需要用下面的方式输入:
string str;
getline (cin,str);

cout << n <<"\n"<< db << endl;
如果想要控制double型的精度,要加上#include <iomanip>头文件。下面的代码会输出123.46:
cout << setiosflags(ios: :fixed) << setprecision(2) << 123.4567 << endl; 

不推荐读者使用cin跟cout来进行输入和输出,因为它们在输入/输出大量数据的情况下表现得非常糟糕,
有时候题目的数据还没有输入完毕就已经超时。

因此还是推荐读者使用C语言的scanf与printf 函数进行输入/输出,只有在十分必要的时候
才使用cin与cout(例如第6章会介绍的string)
2.9.2浮点数的比较

1.
由于计算机中采用有限位的二进制编码,因此浮点数在计算机中的存储并不总是精确的。
例如在经过大量计算后,一个浮点型的数3.14在计算机中就可能存储成3.140000000001,
也有可能存储成3.139999999999, 

这种情况下会对比较操作带来极大的干扰(因为C/C++中的“==”操作是完全相同才能判定为true)。 
于是需要引入一个极小数eps来对这种误差进行修正。
----------------
2.
如果想要使用不等于,只需要
在使用时的Equ前面加一个非运算符“!”即可(!Equ(a, b))#include <stdio.h>
#include <math.h>
const double eps= 1e-8;
#define Equ(a,b) ((fabs((a)-(b)))<(eps))
int main() {
double db = 1.23;
	if (Equ(db, 1.23) ) {
	printf ("true") ;
	} else{
	printf ("false") ;
return 0;

>
大于b+eps的数才能判定为大于b (也即a减b大于eps)#define More(a,b) (((a)-(b))> (eps))

>=
大于b- eps的数都应当判定为大于等于b (也即a减b大于- eps)#define MoreEqu(a,b) (((a)-(b))>(-eps))

<
小于b- eps的数才能判定为小于b (也即a减b小于eps)#define Less(a,b)(((a)-(b))<(-eps))

<=
小于或者等于b,因此小于b+eps的数都应当判定为小于等于b (也即a减b小于eps)#define LessEqula,b) (((a)-(b))<(eps))


3.圆周率π
const double Pi=acos (-1.0) ;

把上面的所有核心部分汇总起来就是下面这些代码:
const double eps=le-8;
const double Pi=acos (-1.0) ;
#define Equ(a,b) ( (fabs((a)-(b)))< (eps) )
#define More (a,b) (((a)-(b))>(eps) )
#define Less(a,b) ( ((a)-(b))< (-eps) )
#define MoreEqu(a,b) (( (a)-(b))> (-eps) )
#define LessEqu(a,b) (((a)-(b) )<(eps) )
2.9.3复杂度
1.
O(1) < O(logn) < O(n) < O(n^2)成立。
对1般的OJ系统来说,一秒能承
受的运算次数大概是10^7 ~ 10^8,因此O(n^2)的算法当n的规模为1000时是可以承受的,而当
n的规模为100000 时则是不可承受的。

2.
例如对某个算法来说,如果其消耗的最大数据空间是一个二维数组,那么这个算法的空间复
杂度就是O(n^2)。在1般的应用中,1般来说空间都是足够使用的(只要不开好几个10^7以上
的数组即可,例如int A[10000][10000]的定义就是不合适的),

因此其重要性一般没有时间复杂度那么大。另外,0(1)的空间复杂度是指算法消耗的空间不随数据规模的增大而增大。
考虑到空间一般够用,因此常常采用以空间换时间的策略,
例如4.2节的散列法就是一种以空间换时间的高效方法。

相关标签: 5、算法笔记