用于保存课程要求的数据结构

时间:2018-11-05 19:06:43

标签: java data-structures

我正在努力寻找一种在课程内部存储课程要求的有效方法。

例如:

  • 通过B后就可以参加课程A
  • 通过课程C和D时,您也可以参加课程A

我希望能够使用树形结构,这样我就可以轻松地检查一个人是否通过了所有要求,但是由于有多个选项可以通过要求,所以不可能。

您知道解决此问题的任何技术或数据结构吗?

2 个答案:

答案 0 :(得分:2)

Course对象具有Prerequisite对象的列表,只需满足即可。 Prerequisite对象包含必需的Course对象的列表,所有这些元素都需要传递,以使Prerequisite对象得到

public class Course {
    private List<Prerequisite> prerequisites;

    public boolean canBeTakenBy(Student student) {
        return prerequisites.isEmpty() ||
               prerequisites.stream().anyMatch(p -> p.isFulfilledBy(student));
    }
}

public class Prerequisite {
    private List<Course> requiredCourses;

    public boolean isFulfilledBy(Student student) {
        return requiredCourses.stream().allMatch(student::hasPassed);
    }
}

public class Student {
    private Set<Course> passedCourses;

    public boolean hasPassed(Course course) {
        return passedCourses.contains(course);
    }
}

答案 1 :(得分:0)

您个人可以通过多种方式来完成自己想要的事情,我认为最简单的方法就是拥有ArrayList< ArrayList < Course > >

例如,如果您想添加一个可能的需求选项,则可以使用课程创建一个ArrayList并将其推送到需求的末尾。

稍后进行检查,只需运行组合,复杂性就不成问题,例如,如果您有10个可能的要求,每个课程有10个课程,最坏的情况是10x10的循环,计算机的10²是完全没有。

https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html