我只是想知道,此功能的主要作用是什么, 假设参数的初始值如下:
numOfCourseIndex = 0
maximumScheduleCount = 1000
schedule = [[Section]]()
result = [[[Section]]]()
orderdGroupOfSections = n
。
func foo(numOfCourseIndex: Int, orderdGroupOfSections: [[[Section]]], maximumScheduleCount: Int) {
if (result.count >= maximumScheduleCount) {
return
}
for n in 0..<orderdGroupOfSections[numOfCourseIndex].count {
for o in 0..<orderdGroupOfSections[numOfCourseIndex][n].count {
for p in 0..<orderdGroupOfSections[numOfCourseIndex][n][o].sectionTime!.count {
for q in 0..<orderdGroupOfSections[numOfCourseIndex][n][o].sectionTime![p].day!.count {
///do something
}
}
}
if (numOfCourseIndex == orderdGroupOfSections.count - 1) {
result.append(schedule)
}
else {
foo(numOfCourseIndex: numOfCourseIndex + 1, orderdGroupOfSections: orderdGroupOfSections, maximumScheduleCount: maximumScheduleCount)
}
}
}
在最坏的情况下,我是说这是(n!)的Big-O,但我不确定。
答案 0 :(得分:1)
您可以执行两项简单的操作来帮助您分析函数的复杂性。首先是简化输入并查看函数的行为。与其运行大量课程或日程安排之类的功能,不如仅查看其中一项功能。处理一门课程需要多少步骤?两人几?三?四?制作一个包含结果的表格,然后查看一门和两门课程,两门和三门课程,三门和四门课程之间的差异。您能看到模式吗?
您可以做的第二件事是将功能分解为多个部分并分别进行分析。您可能无法仅仅看到整个事情的复杂性,因为它是复杂。所以简化一下...最内层循环的复杂性是什么?第二个最里面的循环如何,而忽略最里面的一个呢?两者的复杂度如何?冲洗并重复。