渐进计法

如果一个程序的复杂度为:1<f(n)<2*n

那么我们可以说:f(n)=O(n)即f(n)的复杂度渐进的小于或者等于n.

                           f(n)=Ω(1)即f(n)的复杂度渐进的大于或者等于1,即1是f(n)的下界。

                           f(n)=Θ(n)即f(n)的复杂度渐进的等于n。

以上的三个就是我们经常要用的三个符号,代表大于等于,小于等于,等于,在复杂的解释就要去看渐进数学了。

以上都是针对单个变量的渐进计法,下面列举一个2个变量的渐进计法的列子,更多的变量,依次类推。

f(m,n)=3*m^2*n+m^3+10*m*n+2*n^2

那么有f(m,n)=O(m^2*n+m^3+n^2)

为什么呢?

对于两个变量的渐进计法,我们也是将其分解为两个单变量的渐进计法进行判别的,当f(n)渐进的小于(g(n))时,且f(m)

的复杂度与g(m)的复杂度比值是一个常数时,我们说f(n,m)渐进的小于g(n,m)。这和高等数学的无穷小判断很类似。一个变量满足无穷小,另一个变量比值为常数,那么该函数就是另一个的无穷小。

                           

### 大O表示的概念及其在算法时间复杂度中的应用 大O符号是一种用于描述函数渐近行为的数学记号,主要用于衡量算法的时间复杂度和空间复杂度。它关注的是当输入规模 \(n\) 趋向于无穷大时,算法执行时间和所需资源的增长趋势[^1]。 #### 定义 大O符号的核心在于忽略常数项和低阶项的影响,仅保留增长最快的那部分作为主要指标。例如,如果某个算法的时间复杂度表达式为 \(T(n) = 4n^2 + 3n + 7\),那么其大O表示形式就是 \(O(n^2)\)[^2]。 #### 渐进表示的意义 通过大O符号可以直观比较不同算法之间的效率差异。对于大规模数据处理场景来说尤为重要,因为此时高次幂或者指数级增长会对性能造成显著影响[^3]。 #### 常见时间复杂度分类 以下是几种典型的大O级别,并附有相应例子说明: - **\(O(1)\)**: 表示固定数量的操作次数,不随输入大小变化而改变。比如访问数组指定索引位置元素操作即属于此类别。 - **\(O(\log n)\)**: 对数时间复杂度通常出现在每次迭代都能减少一半待解决问题的情况之下,像二分查找便具有这种特性[^4]。 ```python def binary_search(arr, target): low, high = 0, len(arr)-1 while low <= high: mid = (low + high)//2 if arr[mid]==target: return mid elif arr[mid]<target: low=mid+1 else: high=mid-1 return -1 ``` - **\(O(n)\)**: 当每增加一个单位的数据量都需要额外做一次基本运算时,则该过程呈现线性关系。遍历列表寻找特定值就是一个典型的线性扫描案例。 - **\(O(n \cdot \log n)\)**: 这类复合型模式常见于高效排序技术当中,如归并排序、堆排序等均能达到此水平。 - **\(O(n^2)\)**: 如果存在嵌套循环结构且内部逻辑涉及两重依赖变量间相互作用的话,往往会产生平方级别的开销成本。冒泡排序便是其中之一的例子。 - **\(O(n!)\)**: 极端情况下才会出现如此夸张的增长速率,一般只存在于某些组合优化难题求解过程中,例如旅行推销员问题(TSP)暴力枚举路径方案。 综上所述,在实际开发工作中合理选用合适的数据结构与配套算法能够有效降低程序整体耗时表现,从而提升用户体验满意度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值