PX-18-交换变量的时空分析
1.时空复杂度的问题:
- 运算和赋值都算一次时间复杂度
- 数据越界的问题
int a = 10; int b = 5; // printf("a=%d,b=%d", a, b); /*a = b; b = a;*/ //评估时空复杂度, temp增加空间1, 时间3次 //int temp = a;//temp=10,a=10,b=5 //a = b; //b=5,a=5,temp=10 //b = temp;//b=10,a=5,temp; //空间0, //赋值3次,+3次
//+ -- * //
a = a +b; //a=15,b=5
b = a + b; //b=10,a=15 a = a + b; //a=5,b=10
//+ - * / (加减乘除运算)会导致数据越界, 最安全的做法是异或
//位运算 "异或^" a = a ^ b; //a=15,b=5 b = a ^ b; //b=10,a=15 a = a ^ b; //a=5,b=10
2.
代码
#include<stdio.h> #include<stdlib.h> void main() { int a = 10; int b = 5; // printf("a=%d,b=%d", a, b); /*a = b; b = a;*/ //评估时空复杂度, temp增加空间1, 时间3次 //int temp = a;//temp=10,a=10,b=5 //a = b; //b=5,a=5,temp=10 //b = temp;//b=10,a=5,temp; //空间0, //赋值3次,+3次 //+ -- * // a = a ^ b; //a=15,b=5 b = a ^ b; //b=10,a=15 a = a ^ b; //a=5,b=10 //+ - * /会数据越界, 最安全的做法是异或 // 99 //100 //11,00,0, 10,01,1 printf("\na=%d,b=%d", a, b); getchar(); }

浙公网安备 33010602011771号