在一次采访中有人问我给你两个对象,学生和类(class),它们之间存在多对多关系。一个学生可以注册多门类(class),也可以有很多学生注册一门类(class)。设计一个有效的数据结构来存储这些数据,记住搜索的时间复杂度应该是最佳的。搜索可以针对单个类(class)注册的学生列表,也可以搜索单个学生注册的类(class)列表。
我已经回答说我们可以使用两个 HashMap,一个用于 StudentName -> Course List Lookup,另一个用于 Course Name -> Student List Lookup。对于这两种情况,搜索都将在 O(1) 中进行。
缺点:你会使用大量内存,如果学生的类(class)发生变化,你需要做簿记(你必须更新类(class)名称映射中的条目)。但这不是问题,我猜搜索不可能比 O(1) 更好。
你能告诉我最好的数据结构是什么吗
最佳答案
如果您不需要范围查找(例如,“返回姓名以“B”开头的学生访问过的所有类(class)),前提是数据结构是理想的。唯一可以改进的是替换List
by HashSet
为了使更新/删除操作也在保证的 O(1) 内进行。
Map<Student, Set<Course>> studentsToCources; // HashMap, HashSet
Map<Course, Set<Student>> coursesToStudents; // HashMap, HashSet
当然,这些映射必须封装在某个类中,该类的职责是对调用者透明地对两个映射执行操作。
关于java - 将数据存储在有效的数据结构中,以便快速搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30138347/