【发布时间】:2011-10-31 13:06:08
【问题描述】:
在课堂上,简单排序被用作我们最初定义的 O(N) 运行时之一......
但是由于它每次运行时都会对数组进行一次较少的迭代,所以它不会更像...
运行时气泡= sum(i = 0, n, (n-i)) ?
在渐近分析中不仅是最大的进程一个接一个地运行,这将是 N 次迭代,为什么根据定义这种排序不是 O(N)?
【问题讨论】:
标签: sorting data-structures runtime theory
在课堂上,简单排序被用作我们最初定义的 O(N) 运行时之一......
但是由于它每次运行时都会对数组进行一次较少的迭代,所以它不会更像...
运行时气泡= sum(i = 0, n, (n-i)) ?
在渐近分析中不仅是最大的进程一个接一个地运行,这将是 N 次迭代,为什么根据定义这种排序不是 O(N)?
【问题讨论】:
标签: sorting data-structures runtime theory
1 + 2 + ... + N 的总和是N*(N+1)/2 ...(高中数学)...随着N 趋于无穷大,它接近(N^2)/2。经典O(N^2)。
【讨论】:
我不确定您(或您的教授)从哪里得到冒泡排序是 O(n) 的概念。如果您的教授有有保证的 O(n) 排序算法,他们会明智地尝试申请专利 :-)
就其本质而言,冒泡排序是 O(n2)。
那是因为它必须对整个数据集进行完整的传递,才能正确放置第一个元素。
然后第二遍N - 1 元素以正确放置第二个。第三遍N - 2 元素以正确放置第三个。
以此类推,实际上以接近 N * N / 2 的操作结束,去除多余的 0.5 常量,是 O(n2)。
【讨论】:
冒泡排序的时间复杂度是O(n^2)。 考虑复杂度时,只考虑最大的表达式(但不考虑因子)
【讨论】: