Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 决定优先级队列和排序算法_Algorithm_Sorting_Data Structures - Fatal编程技术网

Algorithm 决定优先级队列和排序算法

Algorithm 决定优先级队列和排序算法,algorithm,sorting,data-structures,Algorithm,Sorting,Data Structures,我对数据结构和算法比较陌生(高中时在YouTube上学习),我在思考的十字路口,因为我正在从事一个项目 我的项目是创建软件来进行测试。我正在考虑按难度对单个问题进行加权,因此在参加考试时,最难的问题会首先显示,最难的问题会最后显示(通过最小堆)。这本身就可以起作用,而且做起来很有效率。然而,在我的测试程序中,用户可能不想要下一个问题。他们可能想回头问一个问题。目前,通过使用my Question类(java)数组解决了这个问题 要转到某个问题,程序将获取该问题的索引并显示它。 但是,使用优先级队

我对数据结构和算法比较陌生(高中时在YouTube上学习),我在思考的十字路口,因为我正在从事一个项目

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

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


但对我来说,这回避了一个问题。如果使用基于整数的排序算法,只使用一个数组,会更有效吗?知道优先级队列的时间复杂度比任何排序算法都快,我倾向于队列。但是,由于我对这一点非常陌生,我想了解一些外部信息。提前感谢。

这将是学习“关注点分离”的好时机

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


这将问题排序与测验用户界面的功能区分开来,并允许您独立地维护和修改其中的每一个功能。如果您想将测验顺序更改为其他内容,则无需担心所有测验UI代码,如果您想更改测验UI,则无需担心问题的顺序。

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

如果我是你,我会选择排序选项。因为它易于使用,并且有几个优点。如果你想增加一个新的难度,你只需要增加这个整数。排序算法完成其余部分。“但是,如果使用优先级队列,我将失去此功能”-->单独的优先级队列可以使用数组的索引。因此,可以通过优先级索引检索问题。在回答所有问题之前,练习是否可以停止?
Question[] quizQuestions = {question1, question2, question3, ...}