首页 > 代码库 > [数据结构]算法
[数据结构]算法
- 算法定义
算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作
- 算法特性
- 有穷性(死循环)
- 确定性(除零)
- 可行性
- 有输入
- 有输出
- 算法设计要求
- 正确性
- 可读性
- 健壮性
- 高效率和低存储量需求
- 算法描述
- 如何描述输出型参数
C++语言中提供引用运算符“&”用于描述输出型参数。
int a=10; int &b=a;
a、b两个变量共享内存空间——>a、b同步发生改变
示例:交换两个整数的算法。
编写一个函数swap1(x,y):
void swap1(int x,int y) { int tmp; temp=x; x=y; y=tmp; }
当执行swap1(a,b)时,a和b的实参值不会发生交换
原因:x、y既是输入型参数,也是输出型参数
改正方法1:采用指针的方式来回传形参的值
void swap2(int *x, int *y) { int tmp; tmp=*x; //将x的值放在tmp中 *x=*y; // 将x所指的值改为*y *y=tmp; // 将y所指的值改为tmp }
交换形参x和y所指向的值 函数调用变为swap2(&a,&b),较为复杂
改正方法2:采用引用型形参,将输出型形参改为引用类型。
void swap(int &x, int &y) //形参前的“&”符号不是指针运算符 { int tmp=x; x=y; y=tmp; }
交换形参x和y的值
执行语句swap(a,b)时,形参实参的匹配为:
int &x=a; //a为x的引用
int &y=b; //b为y的引用
这样,ax共享存储空间,by共享存储空间,因此执行函数后ab的值发生了交换。——>简单
- 算法分析
算法时间复杂度:在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。算法的时间复杂度,就是算法的时间量度,记作:T(n)=O(f(n))。它表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐进时间复杂度,简称为时间复杂度。其中f(n)是问题规模n的某个函数。
推导大O阶:
- 用常数1取代运行时间中的所有加法常数
- 在修改后的运行次数函数中,只保留最高阶项
- 如果最高阶项存在且不是1,则去除与这个项相乘的常数
算法空间复杂度:量度一个算法运行过程中临时占用的存储空间的大小。S(n)=O(g(n))
一般更多考虑时间复杂度
[数据结构]算法
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。