【数据结构与算法】笔记 持续更新ing!

1 篇文章 0 订阅
1 篇文章 0 订阅
本文介绍了使用C语言实现抽象数据类型(ADT)如复数的例子,并详细讨论了时间复杂度的概念,包括平方时间复杂度O(n^2)、立方时间复杂度O(n^3)和对数时间复杂度O(log2n)的实例及分类。
摘要由CSDN通过智能技术生成

【数据结构与算法C语言版】笔记 持续更新ing!

by:weixiao

一、关于抽象数据类型(ADT)

ADT的形式

ADT 抽象数据类型名{
    Data 
      数据对象的定义
      数据元素之间逻辑关系的定义
    Operation
      操作1
        初始条件
        操作结果描述
      操作2
       ...
      操作n
       ...
}ADT 抽象数据类型名

使用ADT实现复数

typedef struct{
    float realpart;     //实部
    float imagpart;
}Complex
/*定义*/
void assign(Complex *A,float real,float imag);
void add(Complex *A,float real,float imag);
void minus(Complex *A,float real,float imag);
void multipy(Complex *A,float real,float imag);
void divide(Complex *A,float real,float imag);
/*使用*/
void assign(Complex *A,float real,float imag)//赋值函数
{
    A->realpart=real;   //相当于把real值赋值给结构体指针A中的realpart
    A->imagpart=imag;   //相当于把imag值赋值给结构体指针A中的imagpart
}
/*进行加减乘除操作*/
直接使用C语言惯例写add、minus、multipy、divide的操作函数,再在main函数中写入实参调用。

二、关于时间复杂度T(n)=O(f(n))

在算法中基本语句重复执行的次数是问题规模n的某个函数f(n),算法的时间复杂度记作:T(n)=O(f(n))
n越大算法的执行时间越长
排序:n为记录数
矩阵:n为矩阵的阶数
多项式:n为多项式的项数
集合:n为元素个数
数:n为数的结点个数
图:n为图的顶点数或边数

1.时间复杂度分类

算法完成工作最少需要多长操作叫做最优时间复杂度
算法完成工作最多需要多长操作叫做最坏时间复杂度
算法完成工作平均需要多少操作叫做平均时间复杂度

2.平方时间复杂度O( n 2 n^2 n2)
int x,y;
x=0;
y=0;
for(int i=1;i<=n;i++)
{
    x++;
}
for(int j=1;j<=n;j++)
{
    for(int k=1;k<=n;k++)
    {
        y++;
    }
}

在寻找时间复杂度是要依照最大的原则,即应该看y++这行的时间复杂度,而y++这行是由两个for循环完成的,因此这个程序的时间复杂度表示为:O( n 2 n^2 n2)。

3.立方时间复杂度O( n 3 n^3 n3)
int x=0;
for(int i=1;i<=n;i++)
{
    for(int j=1;j<=n;j++)
    {
        for(int k=1;k<=n;k++)
        {
            x++;
        }
    }
}

由三个for循环组成,该时间复杂度为O( n 3 n^3 n3)

4.对数时间复杂度O( l o g 2 n log2^n log2n)
int x=0;
for(int i=1;i<=n;i*=2)
{
    x++;
}

由于 2 f ( n ) 2^f(n) 2f(n)<=n,因此f(n)<= l o g 2 n log2^n log2n即T(n)=O( l o g 2 n log2^n log2n)。

并不是所有的时间复杂度都用n来表示
比如:

int x=0;
for(int i=1;i<=n;i++)
{
    for(int j=1;j<=m;j++)
    {
        x++;
    }
}

他的时间复杂度就为O(m*n)。

  • 35
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值