微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在优先队列和排序算法之间做出决定

如何解决在优先队列和排序算法之间做出决定

我对数据结构和算法比较陌生(高中时在 YouTube 上学习),并且我已经走到了一个思考的十字路口,我正在从事一个项目。

我的项目是创建软件来进行测试。我正在考虑按难度对各个问题进行加权,因此在参加考试时,首先显示最难的问题,最后显示最难的问题(通过最小堆)。这本身会起作用,并且这样做会很有效。但是,在我的测试程序中,用户可能不想要下一个问题。他们可能想返回一个问题。目前,这是通过拥有我的问题类 (java) 的数组来解决的。

Question[] quizQuestions = {question1,question2,question3,...}

要转到问题,程序会获取问题的索引并显示它。 但是,有了优先队列,我就失去了这个功能。 我可以想到几种方法来避免这种情况,例如创建一个数组,在优先级队列将问题交给用户之后存储这些问题。

但对我来说,这就引出了一个问题。根据问题难度整数,使用排序算法来代替只有一个数组会更有效吗?知道优先级队列的时间复杂度比任何排序算法都快,我倾向于队列。但我对此很陌生,我想要一些外部意见。提前致谢。

解决方法

这是了解“关注点分离”的好时机。

您绝对希望先对问题进行排序,将它们作为排序列表提供给测验界面,然后让测验 UI 按照提供的顺序提出问题。

这将问题排序的问题与测验用户界面功能的问题分开,让您可以独立维护和修改每个问题。如果您想将测验顺序更改为其他内容,您可以这样做而无需担心所有测验 UI 代码,如果您想更改测验 UI,您可以这样做而无需担心问题的排序方式。>

,

Matt 从软件工程的角度回答了这个问题。从算法上讲,优先级队列的设置时间为 O(n),然后每次弹出 min 元素时为 O(log n)。如果你弹出所有元素,你会得到一个 O(n log n) 时间的排序算法,称为 heapsort,它是渐近有效的,但在实践中往往比你的编程环境提供的任何排序方法都慢。老实说,在任何规模合理的测试中,即使是二次时间也可以,所以我只是排序。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。