为Optimum结果设计数据结构以检索数据

时间:2014-04-25 10:04:11

标签: algorithm data-structures linked-list hashtable

最近我在一本书中看到了这个问题,我指的是技术访谈。问题是这样的 -

您将获得有关参加某些科目的学生的数据。 你需要制作一个数据结构,这样如果我不查询某个科目的学生或者没有学生考虑过的科目,那么复杂性应该更少。

因此,例如有学生P1参加了S1,S2和S3科目 - 学生P2已经参加S1,S4科目。当我查询P1拍摄的主题时 - 答案应该是S1,S2,S3 当我问问谁采取了S1 - 答案应该是P1& P2

到目前为止,我试过了......

最初我开始使用HashMap和LinkedList的组合来解决问题。 但最多我得到的检索是O(1)和O(N)时间与O(N)空间。你觉得我能做得更好吗?我也想过使用BST,但这并不是很有用。

期待有一些有趣的回应!!

1 个答案:

答案 0 :(得分:1)

这种方法的组合应该有效:

  • 学生的HashMap到主题列表
  • 主题为学生名单的HashMap

这允许预期O(1)检索学生正在学习的科目列表,或者学生正在攻读科目的学生列表(可能是列表结构将存储计数以允许O(1)检索元素的数量)。

空间复杂度为O(n)

如果你只想要计数,你可以考虑用一个计数来替换“学生名单”(甚至可能是“受试者名单”)。

如果您想支持删除或存在检查,“主题列表”或“学生列表”不会特别有效。为了有效地执行此操作,您可以使用HashSets替换这些列表。