Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 我们不能使用这种选择排序算法来提高时间复杂度吗?_Python 3.x_Selection Sort - Fatal编程技术网

Python 3.x 我们不能使用这种选择排序算法来提高时间复杂度吗?

Python 3.x 我们不能使用这种选择排序算法来提高时间复杂度吗?,python-3.x,selection-sort,Python 3.x,Selection Sort,我对这个编程单词是新手。我在读关于选择排序算法的书。我看到了这些例子。我在Geeksforgeks网站上看到了python示例。我认为我可以编写比^2上时间复杂度更低的更高效的代码 arr = [64, 25, 12, 22, 11] for i in range(len(arr)): smallest_number = min(arr[i:]) smallest_number_index = arr.index(smallest_number, i) arr[i] ,

我对这个编程单词是新手。我在读关于选择排序算法的书。我看到了这些例子。我在Geeksforgeks网站上看到了python示例。我认为我可以编写比^2上时间复杂度更低的更高效的代码

arr = [64, 25, 12, 22, 11]
for i in range(len(arr)):
    smallest_number = min(arr[i:])
    smallest_number_index = arr.index(smallest_number, i)
    arr[i] , arr[smallest_number_index] = arr[smallest_number_index], arr[i]
print(arr)
在此代码中,时间复杂度为O1。
那么我可以用这个代码代替Geeksforgeks代码吗?

我想你误解了复杂性计算,因为你假设标准方法调用min和index是O1操作。他们不是,他们在行动

让我在每行代码前面写下每行代码的复杂性

for i in range(len(arr)): ->  O(n)
    smallest_number = min(arr[i:]) -> O(n)
    smallest_number_index = arr.index(smallest_number, i) -> O(n)
    arr[i] , arr[smallest_number_index] = arr[smallest_number_index], arr[i] -> O(1)
要计算一个循环迭代的复杂度,请将循环下所有行的复杂度求和:On+On+O1=2*On+1,相当于On 现在,当您运行循环n次时,您必须将它乘以一个循环迭代的复杂性,即
所以总复杂度:n*On=On^2

算法的复杂度甚至更差,如果我没有错的话,精确地说是^3。您有3个嵌套循环:外部循环和另外两个由函数调用min和arr.index隐藏的循环。哪一个最好???mine或Geeksforgeks代码示例???是的,您可以将您的代码称为选择排序算法,算法完全相同,只是实现细节正在更改。虽然这两种代码的时间复杂度都是^2,但GeeksforgekOne比您的方法更有效,因为它在n次迭代中计算最小数索引,而您的代码在相同的情况下需要2*n次迭代。