0

我想为学生注册软件模拟以下情况。在我的模型中,我有一组学生,每个学生最多可以上四门课程,每门课程最多可以有三个年级。

我决定放置三个数组的模式,如下所示:

Students[]---->Courses[]---->Grades[]

这样我就有了一个学生数组,每个学生里面都有一个课程数组,每个课程都有一个成绩数组。

问题是当我想列出学生时,我会有类似的东西:

for i=1 to Students.length() //read students
    for each student i read courses c
        for each courses c read grades

有没有办法避免这种嵌套?我主要使用 Java 进行编码

谢谢

4

1 回答 1

5

这不是O(n^3)循环,而是O(n)循环。其中n是您记录的成绩数。

拥有 3 个 nexted 循环并不意味着你有O(n^3)除非所有 3 个循环都迭代相同n

您的时间复杂度可以说是O(s*c*g)其中

  • s是学生人数
  • c是每个学生最多的课程
  • g是每门课程的最高成绩。

由于c的上限为 4,g的上限为 3,因此您有O(s*4*3)等于O(s)

这就是您拥有的数据量。

如果您真的打算为所有学生处理所有成绩,那么您将很难拥有比存储复杂度更好的时间复杂度。

于 2013-06-25T15:45:12.770 回答