Структура данных для сохранения Требования к курсам - PullRequest
0 голосов
/ 05 ноября 2018

Я борюсь с эффективным способом хранения требований для курса внутри курса.

например:.

  • Вы можете принять участие в курсе А, когда вы прошли B
  • Вы также можете принять участие в курсе А, когда прошли курсы С и D

Я надеялся, что смогу использовать древовидную структуру, чтобы я мог легко проверить, выполнил ли Person все требования, но из-за множественных возможностей для передачи требований это невозможно.

Знаете ли вы какую-либо технику или структуру данных для решения этой проблемы?

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018

A 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);
    }
}
0 голосов
/ 05 ноября 2018

Есть много способов сделать то, что вы хотите, лично я думаю, что самым простым является ArrayList< ArrayList < Course > >

Так, например, если вы хотите добавить возможный вариант требования, вы можете создать ArrayList с курсами и подтолкнуть его к концу требований.

Позже, чтобы проверить это, просто запустите комбинации, сложность не должна быть проблемой, если у вас есть, например, 10 возможных требований с 10 курсами каждый, в худшем случае это будет цикл 10х10, 10² для компьютера - это так же, как ничего.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...