Data structures 图书馆数据结构中的借书

Data structures 图书馆数据结构中的借书,data-structures,computer-science,software-design,Data Structures,Computer Science,Software Design,首先,我想提的问题是一个家庭作业问题。 我已经考虑了很久了 我必须考虑并实现具有以下功能的库软件: 添加/删除新订阅服务器 借书/还书 以下订户拥有哪些书籍 哪位订户持有以下书籍 拥有最多图书的订户列表 我想实现一个堆和两个红黑树,问题是空间复杂度很高。所以我想知道我是否遗漏了什么 订阅者通过ID存储,书籍有代码名。 一棵红黑的树是给订阅者的,另一棵是给借来的书的。 堆是一个最大堆,用于实现最后一个需求 我只能使用数据结构。 感谢您提供的任何见解和答案。我想您也可以使用容器,比如structs?

首先,我想提的问题是一个家庭作业问题。 我已经考虑了很久了

我必须考虑并实现具有以下功能的库软件:

  • 添加/删除新订阅服务器
  • 借书/还书
  • 以下订户拥有哪些书籍
  • 哪位订户持有以下书籍
  • 拥有最多图书的订户列表
  • 我想实现一个堆和两个红黑树,问题是空间复杂度很高。所以我想知道我是否遗漏了什么

    订阅者通过ID存储,书籍有代码名。 一棵红黑的树是给订阅者的,另一棵是给借来的书的。 堆是一个最大堆,用于实现最后一个需求

    我只能使用数据结构。


    感谢您提供的任何见解和答案。

    我想您也可以使用容器,比如structs?使用:

    • 书籍的一个哈希集/哈希表:
      另外,还存储一个标志,该标志确定图书是否已借阅以及借阅对象
    • 一个来自订阅者->图书链接列表的哈希图,不仅可以存储所有订阅者,还可以存储他们借过的图书

    这允许您执行O(1)中列出的所有任务,除了根据订阅者借来的书籍数量对订阅者进行排序。

    我想您也可以使用容器,如structs?使用:

    • 书籍的一个哈希集/哈希表:
      另外,还存储一个标志,该标志确定图书是否已借阅以及借阅对象
    • 一个来自订阅者->图书链接列表的哈希图,不仅可以存储所有订阅者,还可以存储他们借过的图书

    这允许您执行O(1)中列出的所有任务,除了根据订阅者借阅的书籍数量对订阅者进行排序。

    您可以展开吗?您的R-B树是一个用于订阅者,一个用于书籍?也许哈希表在这里值得考虑。此外,仅针对req 5的堆似乎有些过分,应该可以使用双链表的双链表跟踪每个借用/返回操作的O(1)时间开销。但这可能意味着您的person对象需要了解DLL,从设计角度来看这并不好。您是对的,一个rb用于订阅者,另一个用于借阅的书籍。就这一点而言,这是一种过分的做法,但我需要返回订户列表O(n)很好,但它不能是这样的O(n)。我考虑将数据结构组合在一起,并使用哈希表进行某种EAV建模模式,搜索将花费更长的时间(可能是O(n)。并且可能会发生冲突)。您可以扩展吗?您的R-B树是一个用于订阅者,一个用于书籍?也许哈希表在这里值得考虑。此外,仅针对req 5的堆似乎有些过分,应该可以使用双链表的双链表跟踪每个借用/返回操作的O(1)时间开销。但这可能意味着您的person对象需要了解DLL,从设计角度来看这并不好。您是对的,一个rb用于订阅者,另一个用于借阅的书籍。就这一点而言,这是一种过分的做法,但我需要返回订户列表O(n)很好,但它不能是这样的O(n)。我考虑将数据结构组合在一起,并使用哈希表进行某种EAV建模模式,搜索将花费更长的时间(可能是O(n)。并且可能会发生冲突)。实际上,我只需要使用原始数据结构(我在课程中学习的数据结构),所以我非常有限,否则我会使用一个treap,我会把bst中的ID和当前借来的书籍的数量作为一个堆。@Shlomi你能列出那些原始数据结构吗?@Dave我可以使用bst、RB树、哈希表、链表(双联和单联)、堆栈、队列和最小/最大堆。我可以扩展其他数据结构,但我需要证明它们的正确性(以及它们的属性)。顺便说一句,我可能没有提到,但我必须实现这些结构(意味着我不能使用任何库或本机)。因为必须(以编程方式)实现它们,您还可以定义结构来存储实体的其他信息。哈希映射就是以对为元素的哈希集/表。您是否必须满足任何时间复杂性限制?如果不是的话,我只会为最后一个要求编写一个排序程序-不应该伤害任何人。实际上我只需要使用原始数据结构(我在课程中学习的),所以我的能力非常有限,否则我会使用一个treap,我会把bst中的ID和当前借来的书籍的数量作为一个堆。@Shlomi你能列出那些原始数据结构吗?@Dave我可以使用bst、RB树、哈希表、链表(双联和单联)、堆栈、队列和最小/最大堆。我可以扩展其他数据结构,但我需要证明它们的正确性(以及它们的属性)。顺便说一句,我可能没有提到,但我必须实现这些结构(意味着我不能使用任何库或本机)。因为必须(以编程方式)实现它们,您还可以定义结构来存储实体的其他信息。哈希映射就是以对为元素的哈希集/表。您是否必须满足任何时间复杂性限制?如果不是的话,我只会为最后一个要求编写一个排序程序——不应该伤害任何人。