我有以下代码,需要确定该算法的运行时间。
int res=0;
if (n <= 1)
return 1;
for (int i = 0; i < n; i++)
res += Catalan(i) * (Catalan(n - i - 1);
return res;
由于递归内部存在循环,因此我很难确定运行时间。我知道我需要将其转换为回归公式,然后对其进行分析,但是我不确定该怎么做。
答案 0 :(得分:0)
要获得第一个想法,请使用不同大小的输入对其进行概要分析。
如果在输入的大小上绘制图形运行时,则很容易了解其O(N)或O(N²)之类的东西。
然后,您便知道要查找的复杂性,仔细查看代码以找到观察结果的格式证明。
答案 1 :(得分:0)
让我们将您的功能简化为:
from __future__ import print_function
from googleapiclient.discovery import build
from httplib2 import Http
from oauth2client import file, client, tools
from googleapiclient.http import MediaFileUpload,MediaIoBaseDownload
import io
# Setup the Drive v3 API
SCOPES = 'https://www.googleapis.com/auth/drive'
store = file.Storage('client_secrets.json')
creds = None
if not creds or creds.invalid:
flow = client.flow_from_clientsecrets('client_secrets.json', SCOPES)
creds = tools.run_flow(flow, store)
drive_service = build('drive', 'v3', http=creds.authorize(Http()))
def uploadFile():
file_metadata = {
'name': 'new_json.json',
'mimeType': '*/*'
}
media = MediaFileUpload('/home/trigensoft/new_json.json',
mimetype='*/*',
resumable=True)
file = drive_service.files().create(body=file_metadata, media_body=media, fields='id').execute()
print ('File ID: ' + file.get('id'))
uploadFile()
这种简化不应影响时间复杂度。
让n = 1:
for (int i=0; i< n; i++)
res += Catalan(i)*(Catalan(i-1);
return res;
然后我们将调用3个加泰罗尼亚语功能。
如果n = 2,那么对于加泰罗尼亚语(i),我们将:
1
/\
0 0
和加泰罗尼亚语(i-1)
2
/
1
/\
0 0
所以我们总共有:
1
/\
0 0
如果i = 3,则:
2
/\
1 1
/\ /\
0 0 0 0
在我看来, 3
/ \
2 2
/\ /\
1 1 1 1
/\ /\ /\ /\
0 0 0 0 0 0 0 0
太复杂了