python - 如果选择排序和冒泡排序算法的成本都是 O(N2) 那么为什么这没有反映在我的代码中?
问题描述
在我的程序中,我试图比较冒泡排序和选择排序算法,但是在比较结果时,冒泡排序需要大约 10 秒才能对 10000 个随机数组进行排序,而选择排序需要 2 个。
我已经将我的代码与同行的代码进行了比较,它似乎不是由函数本身引起的,尽管我没有排除它。
完整程序链接在这里:https ://drive.google.com/file/d/1sfOZN_lLBeSmtZJpzmpVjCr5JOeHD9V0/view?usp=sharing
我希望输出比选择排序高一点,但它要高得多。
解决方案
大 O 符号不等同于时间。它是时间复杂度的度量。以以下片段为例:
片段一:
for i in range(n):
for j in range(n):
# operation
片段 B:
for i in range(n):
for j in range(n):
# operation
for k in range(n):
# operation
for q in range(n):
# operation
片段 C:
for i in range(n):
for j in range(n):
# operation
for k in range(n):
# operation
for q in range(100):
# operation
在片段 A 中,操作将是运行N^2
时间,在片段 B 中,操作将是运行3N^2
时间,而在最后一个片段中,它将运行2N^2+100
时间;然而,考虑到 operation has O(1)
,所有三个片段的时间复杂度都为 ,O(N^2)
但很明显,运行它们不会花费相同的时间。
观看此内容丰富的视频以获取更多信息。
推荐阅读
- java - h2o.xgboost 训练错误 java.lang.NullPointerException h2o 版本:3.26.0.2
- discord.js - 如何通过我自己的机器人使用音乐不和谐机器人
- vba - 使用定义的函数执行直到
- phabricator - 在 Phabricator 中实现甘特图
- java - 使用 spring @Scheduled 的问题
- javascript - 在比较字符串中使用变量
- javascript - 当同一组件 React JS 中的路由更改时,表单值不会更改
- angular - Angular 9 Elements:如何创建一个独立的 WebComponent(包含所有依赖项)?
- vue.js - 对对象值求和
- python-3.x - 检查数据框中的每个值,如果这意味着较少,则更改给定的值