【数据结构】时间复杂度的例题

🎁个人主页:我们的五年

🔍系列专栏:数据结构

🌷追光的人,终会万丈光芒

 前言:
这篇文章是关于时间复杂度的一些例题,关于时间复杂度和空间复杂度和算法的计算效率的基本知识点我放在这篇文章。

数据结构:时间复杂度

最后喜欢的铁子可以点点关注,互关私信,感谢大家的支持,祝大家天天开心!

目录

 🌷例题1:

🌷例题2:

🌷例题3:

🌷例题4:

🌷例题5:

模拟实现可以看成这样:

🌷例题6:

🌷例题7:

🌷例题8:

🌷例题9:

 🌷例题1:

// 请计算一下Func1中++count语句总共执行了多少次?
void Func1(int N)
{
    int count = 0;
    for (int i = 0; i < N ; ++ i)
    {    
         for (int j = 0; j < N ; ++ j)
         {
             ++count;
         }
    }
    for (int k = 0; k < 2 * N ; ++ k)
    {
         ++count;
    }
    int M = 10;
    while (M--)
    {
         ++count;
    }
    printf("%d\n", count);
}

 F(N)=N^2+2*N+10

第一个循环:N^2

第二个循环:2*N

while循环:10

O(N^2)只看最高次项,这就是N^2.

时间复杂度:O(N^2)

🌷例题2:

void Func2(int N)
{
     int count = 0;
     for (int k = 0; k < 2 * N ; ++ k)
     {
         ++count;
     }
     int M = 10;
     while (M--)
     {
         ++count;
     }
     printf("%d\n", count);
}

 F(N)=2*N+10

时间复杂度:O(N)

🌷例题3:
 

void Func3(int N, int M)
{
     int count = 0;
     for (int k = 0; k < M; ++ k)
     {
         ++count;
     }
     for (int k = 0; k < N ; ++ k)
     {
         ++count;
     }
     printf("%d\n", count);
}

 F(N)=M+N

时间复杂度:O(M+N)

🌷例题4:

void Func4(int N)
{
    int count = 0;
     for (int k = 0; k < 100; ++ k)
     {
         ++count;
     }
     printf("%d\n", count);
}

F(N)=100

循环次数为常数,所以

 时间复杂度:O(1)

🌷例题5:

// 计算strchr的时间复杂度?

const char * strchr ( const char * str, int character );

strchr函数是在str字符串中寻找字符character,如果找到了就返回该字符的地址,否则返回NULL

模拟实现可以看成这样:

const char * strchr ( const char * str, int character )

{

        while(*str!='\0')

        {

                if(*str==character)

                        return str;

                else

                        str++;

        }

        return NULL;
}

最好的情况基本操作执行了1次,最坏的情况基本操作执行了N次,时间复杂度是考虑最坏的情况,所以

时间复杂度:O(N)

🌷例题6:

void BubbleSort(int* a, int n)
{
     assert(a);
     for (size_t end = n; end > 0; --end)
     {
         int exchange = 0;
         for (size_t i = 1; i < end; ++i)
         {
             if (a[i-1] > a[i])
             {
                 Swap(&a[i-1], &a[i]);
                 exchange = 1;
             }
         }
         if (exchange == 0)
         break;
     }
}

 最好的情况基本操作执行了N次,就是已经是拍好的序列,此时exchange=0,直接退出循环

最好的情况基本操作执行了(N-1)!=N*(N-1)/2

而时间复杂度是看最坏情况,而且是估算,所以-1和处以2可以省略。

时间复杂度:O(N^2)

🌷例题7:

int BinarySearch(int* a, int n, int x)
{
     assert(a);
     int begin = 0;
     int end = n-1;
     // [begin, end]:begin和end是左闭右闭区间,因此有=号
     while (begin <= end)
     {
         int mid = begin + ((end-begin)>>1);
         if (a[mid] < x)
             begin = mid+1;
         else if (a[mid] > x)
             end = mid-1;
         else
             return mid;
     }
     return -1;
}

 最好情况时一次,最坏情况时log N次

ps:logN在算法分析中表示是底数为2,对数为N。有些地方会写成lgN。

(建议通过折纸查找的方式讲解logN是怎么计算出来的)

时间复杂度:OogN)

🌷例题8:

// 计算阶乘递归Fac的时间复杂度?
long long Fac(size_t N)
{
     if(0 == N)
         return 1;
    
     return Fac(N-1)*N;
}

 循环了n次

时间复杂度:O(N)

🌷例题9:

// 计算斐波那契递归Fib的时间复杂度?
long long Fib(size_t N)
{
     if(N < 3)
     return 1;

     return Fib(N-1) + Fib(N-2);
}

基本操作次数为2^N次,

时间复杂度:O(2^N)

总结:

该文章提供了时间复杂度的一些基本例题,后面还有一篇文章是在真正的题目中进行应用时间复杂度去题,时间复杂度可以去判断一个算法的优劣,从而得到最优解法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/563883.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

应变计技术解读:如何精确测量结构物的形变

振弦式应变计是一种用于精确测量结构物形变的高精度仪器。这种应变计利用了振弦原理&#xff0c;即物体的振动频率会因其尺寸、形状或应变状态的改变而改变。通过测量这种频率变化&#xff0c;振弦式应变计能够提供关于材料形变的详细信息&#xff0c;这在结构健康监测、工程试…

Apache POI报表统计

Apache POl是一个处理Miscrosoft Office各种文件格式的开源项目。简单来说就是&#xff0c;我们可以使用 POl 在 Java 程N序中对Miscrosoft Office各种文件进行读写操作。一般情况下&#xff0c;POI都是用于操作 Excel 文件。 导入Maven坐标&#xff1a; <dependency>&l…

【数据结构(八)上】二叉树经典习题

❣博主主页: 33的博客❣ ▶文章专栏分类: Java从入门到精通◀ &#x1f69a;我的代码仓库: 33的代码仓库&#x1f69a; &#x1faf5;&#x1faf5;&#x1faf5;关注我带你学更多数据结构的知识 目录 1.前言2.经典习题2.1相同的树2.2另一棵子树2.3翻转二叉树2.4平衡二叉树2.5对…

免费开源圈子社交交友社区系统 可打包小程序 支持二开 源码交付!

线上社交的好处&#xff1a; 当今社会&#xff0c;人们越来越依赖于网络社交。互联网无疑为人类带来了许多好处&#xff0c; 其中一个就是线上社交。通过各种社交平台&#xff0c;人们可以随时随地互动交流&#xff0c;扩大自 己的社交圈&#xff0c;丰富生活。但是&#xf…

智慧水务能效管理系统平台/地下污水厂配电系统电气安全设计

安科瑞电气薛瑶瑶18701709087 1、引言 地下水污厂在城市建设中扮演着重要的角色,负责对城市污水和废物进行处理和排放。然而,由于地下水污厂中存在着许多危险因素,如有害气体、液体和固体废物等,因此要保证电气安全。电气安全系统是地下水污厂安全生产的重要保障措施之一,包括…

常见的软件架构模式

在软件开发过程中&#xff0c;软件架构模式是实现高质量、可扩展系统的关键。本文将介绍一些常见的软件架构模式&#xff0c;分析其优缺点和适用场景&#xff0c;从而帮助大家在实际项目中做出更明智的架构选择&#xff08;注意以下的架构模式相互之间并不一定互斥&#xff0c;…

imx6ull设备树驱动--pinctl、ioctl

添加pinctl节点 进入arch/arm/boot/dts目录下dts文件 在iomuxc下添加pinctlled节点 将 GPIO1_IO03 这个 PIN 复用为 GPIO1_IO03&#xff0c;电气属性&#xff08;配置GPIO一些列寄存器&#xff09;值为 0X10B0 添加led设备节点 与上一节一样&#xff0c;在 / 下面添加设备节…

2024年遥感技术与地理信息国际学术会议(ICRSTGI 2024)

2024年遥感技术与地理信息国际学术会议(ICRSTGI 2024) 2024 International Conference on remote sensing technology and geographic information 一、【会议简介】 2024年遥感技术与地理信息国际学术会议&#xff0c;将汇集世界各地的顶级专家和学者。 在这个会议上&#xf…

Springboot+Vue项目-基于Java+MySQL的网上购物商城系统(附源码+演示视频+LW)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &…

交通公路气象站:监测公路沿线气象

TH-GQX8交通公路气象站是一种专门用于监测公路沿线气象状况的设备系统。它通常由分布在公路沿线的若干个自动气象站联网组成&#xff0c;主要任务是实时监测和记录多种气象数据&#xff0c;为交通管理部门和驾驶员提供准确的路况信息。这些气象数据包括气温、湿度、风速、风向、…

高速公路交通运输大数据平台解决方案

前言 交通运输行业面临着多重挑战。其管控困难&#xff0c;涉及广泛地理范围&#xff0c;导致监控成本高且难以及时响应&#xff1b;同时&#xff0c;行业内数据量大&#xff0c;地理信息数据繁多&#xff0c;缺乏高效的可视化工具来揭示数据规律并优化业务&#xff1b;货运和…

润石科技(RUNIC)汽车电子应用方案和物料选型

一、润石科技&#xff08;RUNIC&#xff09;简介 江苏润石科技有限公司是一家专注于高性能、高品质模拟/混合信号集成电路研发和销售的高科技半导体设计公司。公司主要产品线分为两类&#xff1a;信号链和电源管理&#xff0c;其中信号链包含运算放大器、比较器、模拟开关、数…

微信小程序开发

微信小程序隶属于前端&#xff0c;因此我们只需要了解掌握一些基本的功能与业务逻辑即可。 HttpClient HttpClient 是Apache Jakarta Common 下的子项目&#xff0c;可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包&#xff0c;并且它支持 HTTP 协议…

APP自动化测试-Android SDK SDK Manager.exe或者uiautomatorviewer.bat打不开,点击就一闪而已的原因

原因是找不到Java.exe的路径&#xff0c; 如果是uiautomatorviewer.bat打不开&#xff0c;则使用文本编辑器打开它&#xff0c;然后添加java安装路径 set java_exeC:\Program Files\Java\jdk1.8.0_321\bin\java.exe 同理&#xff1a; 如果是SDK Manager.exe和AVD Manager.ex…

一个不同长度元素排序找行和列的需求

1、需求&#xff1a;三种长度的元素&#xff0c;分别是4、8、12&#xff0c;每一行的长度是12&#xff0c;超过12就排到下一行&#xff0c;我们将这三种类型的多个元素打乱&#xff0c;然后找到这些元素对应的行和列。 如下图&#xff1a; 2、解决思路&#xff1a; 创建一个长…

Java中的构造器

即使在类中什么都不写也会自动的生成一个构造器 注意 使用new关键字是在调用构造器 如果定义了有参构造 那么就不会默认的走Person person new Person();如果没有自己手动的定义无参构造就不能使用 在idea中 用按键Altinsert可以快速生成有参、无参构造&#xff08;某些品牌的…

SpringBoot:SpringMVC(下)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、RequestBody补充二、PathVariable三.RequestPart:四.ResponseBody五.CookieValue&#xff0c;SessionAttribute&#xff0c;RequestHeader 前言 提示&…

window下qt可执行程序打包

添加软件图标 方法1&#xff1a; QApplication a(argc, argv);// 设置应用程序图标QIcon appIcon("C:/Users/Administrator/Desktop/otp.png"); // 替换为你的图标文件路径a.setWindowIcon(appIcon); 缺点&#xff1a;运行后才显示图标&#xff0c;可执行程序文件图…

集成触发器(数电笔记)

同步触发器&#xff1a; 主从触发器&#xff1a; 边沿触发器&#xff1a;

2024年怎么购买阿里云5年云服务器?购买5年有什么优惠?(图文教程)

2024年阿里云优惠活动中的服务器大多数都是针对新用户&#xff0c;而且时长都变成了1个月或者1年&#xff0c;比较符合大多数用户的需求&#xff0c;不过有些用户由于需要长期使用云服务器&#xff0c;需要一次买5年&#xff0c;但是现在活动中的云服务器又没有5年的了&#xf…