您的位置:首页 > 财经 > 产业 > 在手机上做游戏的软件_中国能建平台_镇江百度公司_郑州粒米seo顾问

在手机上做游戏的软件_中国能建平台_镇江百度公司_郑州粒米seo顾问

2025/1/23 22:14:48 来源:https://blog.csdn.net/weixin_55341642/article/details/142392586  浏览:    关键词:在手机上做游戏的软件_中国能建平台_镇江百度公司_郑州粒米seo顾问
在手机上做游戏的软件_中国能建平台_镇江百度公司_郑州粒米seo顾问

目录

前言

例题1:

例题2:

例题3:

例题4:


前言

在上一章讲解了时间复杂度的概念,以及用 大O的渐进表示法 表示 时间复杂度

数据结构 ——— 算法的时间复杂度-CSDN博客

接下来利用C语言代码的例题,更深一步的掌握用 大O的渐进表示法 表示 代码的时间复杂度


例题1:

代码演示:

void Func1(int N)
{int count = 0;// 循环1for (int k = 0; k < 2 * N; k++){count++;}// 循环2int M = 10;while (M--){count = count + 1;}
}

问:计算 Func1 函数的时间复杂度?

代码解析:

循环1 执行了 2*N 次,循环2 执行了 10 次 

时间复杂度函数式:F(N) =  2*N + 10

根据大O的渐进表示法的规则:只保留最高阶项(除去 F(N) 中的10) ;如果最高阶项存在且不是1,则去除与这个项目相乘的常数(除去 F(N) 中的2),得出大O的渐进表示法

大O渐进表示法:O(N)


例题2:

代码演示:

void Func2(int N, int M)
{int count = 0;// 循环1for (int k = 0; k < N; k++){count++;}// 循环2for (int k = 0; k < M; k++){count++;}
}

问:计算 Func2 函数的时间复杂度?

代码解析:

循环1 执行了 N 次,循环2 执行了 M 次

时间复杂度函数式:F(N) =  N + M

根据大O的渐进表示法的规则:N 和 M 都是平阶,且不是常数,所以都要保留下来,得出大O的渐进表示法

大O的渐进表示法:O(N + M)


例题3:

代码演示:

void Func3(int N)
{int count = 0;// 循环1for (int k = 0; k < 100; k++){count++;}
}

问:计算 Func3 函数的时间复杂度?

代码解析:

循环1 执行了 100 次

时间复杂度函数式:F(N) = 100

根据大O的渐进表示法的规则:用常数1取代运行时间中的所有加法常数( F(N) 中的 100 取代为1),得出大O的渐进表示法

大O的渐进表示法:O(1)

注意:O(1) 并不是代表代码只执行了 1 次,而是代表代码执行了常数次


例题4:

代码演示:

const char* Find_Str_Element(const char* str, int character)
{while (*str != '\0'){if (*str == character)return str;elsestr++;}return NULL;
}

问:计算 Find_Str_Element 函数的时间复杂度?

代码解析:

例题4 代码的意思是:在 str 字符串中找出和 character 相同的元素,如果找到了就返回 character 位置的指针,如果 str 字符串遍历完了都没有找到就返回 NULL

但是 例题4 代码的运行次数并不是像 例题1、2 一样,固定执行 N 次 或者 N + M 次,而是要分情况看待:

最好情况:character 元素是 str 字符串首元素,程序执行 1 次 

中间情况:character 元素是 str 字符串中间元素,程序执行 N/2 次

最坏情况:character 元素是 str 字符串尾元素 或者 str 中没有 character ,程序执行 N 次

注意:在实际中一般情况关注的是算法的最坏运行情况(底线思维,做最坏的打算)

所以 str 字符串查找 character 元素的时间复杂度为:O(N)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com