java - 用于比较具有最常见属性的项目的高效数据结构

标签 java data-structures

<分区>

我需要针对以下问题的有效数据结构的建议。

我有两个学生(男和女)列表,以及他们已经上过的各自类(class)(按日期排序)。该列表已经按姓氏、名字的字母顺序排列。

用户将给出学生姓名,即。学生 X,而该程序需要做的是找出与学生 X 共享最多类(class)的男学生或女学生。

最佳答案

听起来你需要Associative Arrays .关联数组将某种类型的键对象映射到另一个可能是不同类型的对象。它通常被称为“ map ”,因为它就是这样做的。 map 可以通过 Hash Table 实现,这意味着您有固定的时间查找您的 key -> 对象映射。对于这个问题,我实际上建议使用 2 个哈希表。第一个将学生姓名映射到所修类(class)列表。第二个将类(class)名称映射到类的学生。您的学生 -> 类(class)查找将非常快,您的类(class) -> 学生列表查找也将很快。此外,当您处理特定学生 X 时,您可以使用第三方将学生姓名映射到一个整数,以计算他们与学生 X 共享一个类(class)的次数。这将是一个非常有效的实现。

最重要的是,它最终可能会非常容易实现。关系映射是如此常见的任务,而关联数组是如此有用,以至于许多语言都内置了它们,或者在标准库中。 Python 有它的字典,Perl 有它的散列,Java 有一个 HashMap(以及许多其他类型的映射),C++ 有 std::map,尽管它没有散列表支持,也没有恒定的时间访问。除非您被禁止在本练习中使用您的语言标准库,否则您应该不会在运行高效解决方案时遇到太多麻烦。

关于java - 用于比较具有最常见属性的项目的高效数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1095799/

相关文章:

python - 为什么此链接列表代码在 HackerRank 中显示错误?

java - 在 Android 中使用 Hashmap 存储伪无限游戏世界时内存不足

java - Quasar 的光纤中的阻塞 IO 是否会阻塞其线程池中的线程?

java - org.openqa.selenium.SessionNotCreatedException:无法创建新的远程 session 。在模拟器中初始化android驱动程序时

java - 指示 Java FX TreeItem getChildren 延迟执行期间的进程

java - 保持项目排序的集合数据结构

c++ - pop如何使用链表在堆栈中工作?

java - 接口(interface)和@RequestBody

java - Windows 和 Mac 上的时区

python - 在 Python 中查找二叉树的路径