mysql时间复杂度o的n次方_复杂度分析的套路及常见的复杂度

本文介绍了使用大O表示法评估算法时间复杂度的套路,包括明确输入规模、考虑最坏情况、计算执行次数、去除低阶项和常数项。并列举了常见的算法复杂度,如O(1)、O(logn)、O(n)、O(nlogn)、O(n^c)、O(c^n)和O(n!),以及它们在不同算法中的应用。
摘要由CSDN通过智能技术生成

421b6165e19d656a3b389496f4ce318f.png

前言

本篇文章收录于专辑: http://dwz.win/HjK ,点击解锁更多数据结构与算法的知识。

你好,我是彤哥,一个每天爬二十六层楼还不忘读源码的硬核男人。

上一节,我们一起学习了表示复杂度的几个符号,我们说,通常使用大O来表示算法的复杂度,不仅合理,而且书写方便。

那么,使用大O表示法评估算法的复杂度有没有什么套路呢?以及常见的复杂度有哪些呢?

本节,我们就来解决这两个问题。

前情回顾

在正式讲解套路之前,我们先回忆一下前面几节讲到的内容。

在第2节,我们学习了渐近分析法,将算法的复杂度与输入规模挂钩,随着输入规模的增大,算法执行的时间将呈现一种什么样的趋势,将这个趋势用函数表示,再去除低阶项和常数项,就得到了算法的时间复杂度。

在第3节,我们分别从最坏、平均、最好三种情况来分析了算法的复杂度,得出结论,一般使用最坏情况来评估算法的复杂度。

在第4节,我们通过动态数组的插入元素及经典快速排序的时间复杂度,解释了有的时候不能使用最坏情况来评估算法的复杂度。

在第5节,我们从读音、数学、通俗理解三个方面分析了各种表示算法复杂度的符号,得出结论还是使用大O比较香,大O代表了算法的上界,它与前面讲到的最坏情况往往是对应的。

所以,这里所说的套路也是针对大部分情况,也就是最坏情况,对于一些个例,比如经典快排,我们虽然也是使用大O表示他们的复杂度,但是,其实是一种均摊的复杂度。

好了,让我们看看计算算法复杂度的套路到底是什么吧。

套路

我将计算算法复杂度的套路归纳为以下五步:

明确输入规模n;

考虑最坏情况或均摊情况,如果最坏情况为个例,那就是均摊;

计算算法执行的次数与n的关系,并用函数表示出来;

去除低阶项;

去除常数项;

比如,对于在数组中查找指定元素的操作:

输入规模为数组的长度n;

考虑最坏情况为目标元素不在数组中;

算法的执行次数为遍历所有数组元素,也就是n次,用函数表示f(n) = n;

去除低阶项,没有低阶项,还是n;

去除常数项,没有常数项,还是n;

所以,在数组中查找指定元素的时间复杂度为O(n)。

OK,使用这种方式可以很快的计算出算法的复杂度,也不需要进行额外的计算,非常快捷高效。

常见的复杂度

上面我们说了,复杂度的计算就是计算与输入规模n的关系,所以,我们想想数学中关于n的函数就能得出常见的复杂度了,我绘制了一张表格:

与n的关系

英文释义

复杂度

示例

常数(不相关)

Constant

O(1)

数组按索引查找元素

对数相关

Logarithmic

O(logn)

二分查找

线性相关

Linear

O(n)

遍历数组的元素

超线性相关

Superlinear

O(nlogn)

归并排序、堆排序

多项式相关

Polynomial

O(n^c)

冒泡排序、插入排序、选择排序

指数相关

Exponential

O(c^n)

汉诺塔

阶乘相关

Factorial

O(n!)

行列式展开

n的n次方

O(n^n)

不知道有没有这种算法

在这张表中,复杂度是依次增加的,可以看到常数复杂度O(1)无疑是最好的,让我们用一张图来直观感受下:

1a72d29a19dc191392f822536c02b17c.png

后记

本节,我们一起学习了复杂度分析的套路以及常见的复杂度,到目前为止,我们不管是举例还是讲解基本上都在说时间复杂度。

那么,空间复杂度又是什么呢?空间与时间之间如何权衡呢?

下一节,我们接着聊。

关注公号主“彤哥读源码”,解锁更多源码、基础、架构知识。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL密码的复杂度与caching_sha2_password插件有关。caching_sha2_password是MySQL 8.0中的默认身份验证插件,它使用SHA256哈希算法对密码进行加密存储。在存储密码时,该插件使用盐(salt)来增加安全性,并使用多轮哈希(数千轮)来增加密码的强度。这样做可以防止蛮力攻击和密码的反向工程。 使用caching_sha2_password插件,MySQL会要求密码满足一定的复杂度要求,例如包含至少一个特殊字符、一个大写字母、一个小写字母和一个数字。这样可以确保密码足够强壮,难以猜测和破解。如果密码不符合要求,MySQL会拒绝创建或修改用户的密码。 为了提高安全性,建议使用较长且复杂的密码,并定期更换密码。这样可以有效防止未经授权的用户获取数据库的访问权限。此外,及时更新MySQL及相关软件的版本,以确保使用最新的安全性补丁和功能。 如果你遇到无法加载插件缓存sha2密码的问题,可能是由于旧版本的客户端不支持caching_sha2_password插件。解决方法是升级客户端或使用支持该插件的最新版本的工具,如sqlyog。提供了更详细的MySQL密码复杂度与密码过期策略介绍,你可以进一步了解和学习。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [远程连接MySQL错误“plugin caching_sha2_password could not be loaded”的解决办法](https://blog.csdn.net/qq_41538097/article/details/106905416)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [MySQL新密码机制介绍caching_sha2_password](https://blog.csdn.net/weixin_49319422/article/details/127449897)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值