【发布时间】:2011-02-12 21:06:08
【问题描述】:
首先,我想提一下这个问题是一个家庭作业问题。 我对实现的思考已经够久了。
我必须思考并实现一个具有以下功能的库软件:
- 添加/删除新订阅者。
- 借/还书。
- 以下订阅者有哪些书籍?
- 哪个订阅者持有以下书籍?
- 拥有最多书籍的订阅者列表。
我想实现一个堆和2个红黑树,问题是空间复杂度很高。所以我想知道我是否遗漏了什么。
订阅者由 I.D 存储,书籍有代号。 一棵红黑树是给订户的,另一棵是给借来的。 堆是一个最大堆,以实现最后一个要求。
除了数据结构,我不能使用其他任何东西。
感谢任何见解和答案。
【问题讨论】:
-
你能扩展吗?您的 R-B 树是一棵用于订阅者,一棵用于书籍?也许哈希表在这里值得考虑。此外,仅用于 req 5 的堆似乎有点矫枉过正,应该可以使用双向链表的双向链表在 O(1) 时间开销中跟踪每个借用/返回操作的开销。但这可能意味着您的 person 对象需要了解 DLL,这从设计的角度来看并不好。
-
嗯,你是对的,一 rb 是给订户的,一 rb 是给借来的书的。仅此而已,但我需要返回订阅者列表 O(n) 会很好,但不能像这样 O(n) 。我坚持将数据结构组合在一起并使用哈希表进行某种 EAV 建模模式,搜索将花费更长的时间(可能 O(n)。并且可能存在冲突)。
标签: data-structures computer-science software-design