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

时间空间复杂度分析:

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

用 异或^ 不用借助中间变量就能实现数据的交换 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 函数指针的引用 它的参数是一个函数指针的引用 返回值是函数指针的引用

时间: 2024-10-14 01:07:37

指针引用和时间空间复杂度分析 杂谈的相关文章

Android系统的智能指针(轻量级指针、强指针和弱指针)的实现原理分析

文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6786239 Android 系统的运行时库层代码是用C++来编写的,用C++来写代码最容易出错的地方就是指针了,一旦使用不当,轻则造成内存泄漏,重则造成系统崩溃.不过系统为 我们提供了智能指针,避免出现上述问题,本文将系统地分析Android系统智能指针(轻量级指针.强指针和弱指针)的实现原理. 在使用C++来编写代码的过程中,指针使用不当造成

C++二级指针和指针引用

前提 已经清晰一级指针和引用. 可参考:指针和引用与及指针常量和常量指针 或查阅其他资料. 一级指针和二级指针 例子 个人觉得文字描述比较难读懂,直接看代码运行结果分析好些,如果想看文字分析,可参考文末参考文章. #include <iostream> using namespace std; void make(int **pp) { **pp = 66;//这样只是改变了指向的值,即a, 指向没有改变 } int main() { int a=5; int *q=&a; int *

JSON的put方法是一个指针引用

JSON的put方法是一个指针引用; import org.json.simple.JSONObject; JSONObject a=new JSONObject(); a.put("date","2015-11-08");a.put("time","15:48:28"); a.toJSONString() --> {"date":"2015-11-08","time&q

等式转换(熟悉一下链表,指针引用)

1 /***************************************************************************** 2 *输入一个正整数X,在下面的等式左边的数字之间添加 + 号或者 - 号,使得等式成立. 3 *1 2 3 4 5 6 7 8 9 = X 4 *比如: 5 *12 - 34 + 5 - 67 + 89 = 5 6 *1 + 23 + 4 - 5 + 6 - 7 - 8 - 9 = 5 7 *请编写程序,统计满足输入整数的所有整数个数

编程题:字符串的指针引用。用指针法实现。功能:将字符串str2复制连接到str1

#include<stdio.h> void main() { char *s1,*s2, str1[30]="beijing",str2[10]="China"; for(s1=str1;*s1!='\0';s1++); for(s2=str2;*s2!='\0';) *s1++=*s2++; *s1='\0'; printf("%s\n",str1); } 编程题:字符串的指针引用.用指针法实现.功能:将字符串str2复制连接到s

浅谈运用指针引用字符串

一.字符串的引用方式 1.如果字符串存放在字符数组中可以用数组名和下标引用 char string[10] = "Hello word"; printf("%s",string); 2.用字符指针变量指向字符串常量,用字符指针引用字符串 char *strp = "Hello word"; printf("%s",strp); //系统将字符串常量以字符数组形式保存在内存中,字符串末尾系统自动加了一个'\0'.再将字符数组的首

面向对象--多继承&amp;派生类对象内存布局分析&amp;各基类指针所指向的位置分析

背景 原文链接:ordeder  http://blog.csdn.net/ordeder/article/details/25477363 关于非虚函数的成员函数的调用机制,可以参考: http://blog.csdn.net/yuanyirui/article/details/4594805 成员函数的调用涉及到面向对象语言的反射机制. 虚函数表机制可以查看下面这个blog: http://blog.csdn.net/haoel/article/details/1948051 总结为: 其一

时间空间复杂度的解释

何为时间空间复杂度? <1>空间复杂度O(N): 一个算法在运行过程中临时占用存储空间大小的量度.一个算法的空间复杂度只考虑在运行过程中为局部变量分配的存储空间的大小,它包括为参数表中形参变量分配的存储空间和为在函数体中定义的局部变量分配的存储空间两个部分. 举例: (1)如一个算法的空间复杂度为一个常量,即不随被处理数据量n的大小而改变时,可表示为O(N) (2)当一个算法的空间复杂度与以2为底的n的对数成正比时,可表示为O(log2n) (3)当一个算法的空间复杂度与n成线性比例关系时,可

C++ 指针引用

//指针引用 #include<iostream> using namespace std; struct Teacher{ char name[30]; int age; }; int InitA(Teacher **pout/*out*/){ int ERRO_MSG = 0; if (pout==NULL) { ERRO_MSG = 1; printf("pout==NULL erro msg:%d\n", ERRO_MSG); return ERRO_MSG; }