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

指针引用和时间空间复杂度分析 杂谈

时间:2015-12-14 23:00:17      阅读:430      评论:0      收藏:0      [点我收藏+]

标签:

时间空间复杂度分析:

牺牲时间换取空间,或者牺牲空间换取时间:
如果空间很大,可以用多线程来,可以大大提速
如果空间很小,只用一个元素,这样增加了时间

用 异或^ 不用借助中间变量就能实现数据的交换 a^=b
要完成两个数组之间的交换,用一个数组来作为临时中间变量进行交换时,可以用多线程,
相比只用一个数据来作为临时变量,大大加快了速度,多线程可以并行处理,
O(n)相比O(1)可以加快速度,O(1)相比O(n)可以节约空间,
用 异或 ^ a^=b 就是O(0)既节约时间又节约空间
异或交换:(*p1) ^= (*p2);
(*p2) ^= (*p1);
(*p1) ^= (*p2);

 

#include<iostream>
#include <time.h>

using namespace std;


//一般情况下看一个算法的时间就看循环,看空间就看节约了多少内存
void search(int *p,int n,int data)
{

for (int i = 0; i < n;i++)//循环次数统计时间
{
if (p[i]==data)
{
return;
}
}
}
void swap(int *p1,int *p2)
{
(*p1) ^= (*p2);
(*p2) ^= (*p1);   /*用 异或 ^ a^=b 就是O(0)既节约时间又节约空间*/
(*p1) ^= (*p2);

{
int temp = *p1;
*p1 = *p2; //用中间变量速度会很慢  用时间换空间
*p2 = temp;
}

 

}


void main()
{
time_t ts;
unsigned int times = time(&ts);
srand(times);

int a[100];
for (int i = 0; i < 100;i++)
{
cout << (a[i] = rand()) << endl;
}
unsigned short data = 65535;
//data += 1;容错性,任何情况都可以处理
printf("飞哥有%d个", data);

cin.get();
}

技术分享

技术分享

索引的方式:
相比数组: 相比链式存储:
N个索引,M个元素 N个索引,M个元素
删除 顺序查找 二分查找 链表的查找 :O(M) 索引O(M/N)
数组 索引 数组 索引 数组 索引 链表的插入:O(1) 索引O(1)
O(M) O(M/N) O(M) O(M/N) 增加O(N) O(M/N) 链表的删除:0(1) 索引O(1)
链表的增加:O(1) 索引O(1)

 

最后给大家分享两道有点小变态的面试题:

1. int(*z(int x,int(*y)(int)))(int)
分析:
原型是:int(*T)(int)
int(*y)(int)=Y 函数指针
1可以简写为:Y z(int x,Y)
z是一个函数 它的参数是一个函数指针 返回值又是一个函数指针

 


2. int(*&z(int x,int(*&y)(int)))(int)
&z 函数指针的引用 它的参数是一个函数指针的引用 返回值是函数指针的引用

指针引用和时间空间复杂度分析 杂谈

标签:

原文地址:http://www.cnblogs.com/FG123/p/5046718.html

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