python index函数时间复杂度_如何确定Python中递归循环的时间复杂度?
分析此函數(shù)的主要挑戰(zhàn)是沒有那么多的遞歸調(diào)用,但每次調(diào)用都會(huì)返回一個(gè)逐漸增大和增大的元素列表。特別要注意的是,有n! n個(gè)元素列表的排列。因此,我們知道如果你在一個(gè)大小為n的列表上進(jìn)行遞歸調(diào)用,將會(huì)有n!元素返回。
讓我們來看看這將如何影響運(yùn)行時(shí)。如果只有一個(gè)元素的列表,則時(shí)間復(fù)雜度為O(1)。否則,我們假設(shè)在列表中有n + 1個(gè)元素。算法然后
在大小為n的列表上進(jìn)行遞歸調(diào)用。
對(duì)于返回的每個(gè)元素,將列表的第一個(gè)元素拼接到所有可能的位置。
返回結(jié)果。
我們可以通過看在遞歸的每一層所做的工作,這意味著我們將重點(diǎn)放在步驟(2)和(3)現(xiàn)在分析遞歸總運(yùn)行時(shí)間。
請(qǐng)注意,在步驟2中,如果列表中有n + 1個(gè)元素,我們將不得不查看n!遞歸調(diào)用產(chǎn)生的排列。每個(gè)排列都有n個(gè)元素。對(duì)于每個(gè)排列,我們創(chuàng)建n + 1個(gè)新列表,其中每個(gè)列表都有n + 1個(gè)元素。因此,我們有n!循環(huán)迭代,每個(gè)循環(huán)都有(n + 1)的工作。因此,這個(gè)級(jí)別完成的總工作量(大致)為(n + 1)· ?!我們可以注意到(n + 1)· N! =(n + 1)!,所以完成的工作可以寫成(n + 1)(n + 1)!。這嚴(yán)格小于(n + 2)!,所以我們可以說在有n + 1個(gè)總元素時(shí)所做的工作是O((n + 2)!)。 (注意,我們不能說這是O(n!),因?yàn)閚!= o((n + 2)!))。
所以,現(xiàn)在我們可以說,所做的總功是(粗略地講)由
1給出! + 2! + 3! + ... +(n + 1)!
據(jù)我所知,這沒有一個(gè)很好的封閉式公式。但是,我們可以注意到,
1! + 2! + 3! + ... +(n + 1)!
=(n + 2)(n + 1)!
=(n + 2)!
所以整體表達(dá)式是O((n + 2)!)。同樣,我們有
1! + 2! + 3! + ... +(n + 1)!
>(n + 1)!
所以整體表達(dá)式是Ω((n + 1)!)。換句話說,真正的答案夾在(n + 1)之間的某個(gè)地方(漸近地)!和(n + 2)!.因此,運(yùn)行時(shí)間會(huì)快速增長(zhǎng)。
希望這會(huì)有所幫助!
總結(jié)
以上是生活随笔為你收集整理的python index函数时间复杂度_如何确定Python中递归循环的时间复杂度?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安卓三维展示源码_手机(安卓)自动化脚本
- 下一篇: python爬取正确但不出文件_[求助]