data-structures - 哪种数据结构适合这个现实世界的情况?
问题描述
现实世界的问题:
假设在一家银行,客户在柜台前获得服务。并且在柜台,他们根据顾客的服务时间服务。服务时间最短的顾客在服务时间比前一位顾客多的顾客之前得到服务。这意味着,计数器遵循第一种方法完成的最短工作。
我的工作:
现在我的工作是选择合适的数据结构来为计数器找到优化的解决方案。并广泛地证明数据结构的选择是合理的(2 页/200 字或接近它)。
试过:
所以根据我的观察,我认为 BFS 是适合这种情况的完美数据结构。但我不知道如何用点和解释来描述它。我必须广泛地解释它。
期待:
5-6分关于我为什么选择数据结构的例子。
解决方案
首先想想为什么不应该使用BFS?
因为你想用最短的工作时间为客户服务,所以你需要用最短的时间找到工作。如果您使用 BFS,每次您想要找到下一个要服务的客户时,您都将遍历所有节点。因此,这不是理想的解决方案。
你需要什么?
您需要一些算法/数据结构,以便在新客户到达或已为某些客户提供服务时有效地找到最短的工作,而无需遍历整个客户/工作列表。这可以使用堆(优先级队列)来完成,更具体地说Min-Heaps
。
为什么是堆?
- 堆中的插入时间为 O(logN)
- 可以使用 O(logN) 时间复杂度提取最小/最大元素,而无需遍历堆中的每个节点。
- 无论您执行什么操作(插入/提取),最小/最大元素始终分别位于最小堆/最大堆中的顶部节点。
希望这可以帮助。
推荐阅读
- r - renv 0.12.0 是从项目库中加载的,但是 renv 0.11.0 记录在 lockfile 中
- c++ - 类对象到字符串的隐式转换运算符
- python - 未知的树更新程序 grow_gpu_hist xgboost
- javascript - 将原始 json 数据传输到 reactjs 中的 html 表
- android - 安卓 | 在 ViewHolder onClick 上更新 RecyclerView 适配器
- javascript - document.getElementById 上的 JS 运算符给出了意外的结果
- ios - 如何防止嵌套的 UITableView 移动?
- node.js - 我的 UseEffect 内容延迟了我在 Next.js 中的 DOM 渲染
- c++ - 是否可以通过方法链接创建在编译时构建的 constexpr 字节字符串?
- mysql - 如何仅在时间戳不为空的情况下将时间戳转换为日期