首页 > 代码库 > [数据结构]算法

[数据结构]算法

  • 算法定义

  算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作

  • 算法特性
  1. 有穷性(死循环)
  2. 确定性(除零)
  3. 可行性
  4. 有输入
  5. 有输出
  • 算法设计要求
  1. 正确性
  2. 可读性
  3. 健壮性
  4. 高效率和低存储量需求
  • 算法描述

技术分享

  • 如何描述输出型参数

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取代运行时间中的所有加法常数
  2. 在修改后的运行次数函数中,只保留最高阶项
  3. 如果最高阶项存在且不是1,则去除与这个项相乘的常数

技术分享

 

算法空间复杂度:量度一个算法运行过程中临时占用的存储空间的大小。S(n)=O(g(n))

 

一般更多考虑时间复杂度

 

[数据结构]算法