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
Javascript 根据用户输入对项目列表进行优先级排序(使用尽可能少的比较)_Javascript_Algorithm - Fatal编程技术网

Javascript 根据用户输入对项目列表进行优先级排序(使用尽可能少的比较)

Javascript 根据用户输入对项目列表进行优先级排序(使用尽可能少的比较),javascript,algorithm,Javascript,Algorithm,我正试图用Javascript创建一个简单的“人力优先”程序,我想找到一种根据用户输入对项目列表进行排序的方法 我认为最好使用一种算法来实现这一点(这样用户将得到尽可能少的提示) 我想按重要性对以下项目进行排序(其中每对项目的相对重要性由用户决定): 1)完成Haxe项目 2)完成Java项目 3)修理汽车 我想两人一组向用户展示这些项目,然后让他们决定哪个项目最重要。哪种排序算法最适合此任务(用户将在其中对项目进行比较?) 下面是一个使用用户输入的自动优先排序器示例: 更新:我写了一个脚本,它

我正试图用Javascript创建一个简单的“人力优先”程序,我想找到一种根据用户输入对项目列表进行排序的方法

我认为最好使用一种算法来实现这一点(这样用户将得到尽可能少的提示)

我想按重要性对以下项目进行排序(其中每对项目的相对重要性由用户决定):

1)完成Haxe项目

2)完成Java项目

3)修理汽车

我想两人一组向用户展示这些项目,然后让他们决定哪个项目最重要。哪种排序算法最适合此任务(用户将在其中对项目进行比较?)

下面是一个使用用户输入的自动优先排序器示例:


更新:我写了一个脚本,它就是这样做的:在这里

听起来像是使用Javascript的拖放可排序列表

您可以对示例进行排序:一个基本列表,然后单击右侧的inspect按钮以获取当前订单。应该很容易适应你想要的


注意:我与该网站没有任何联系——只是我在谷歌很快找到的第一个网站。

听起来像是使用Javascript的拖放排序列表

您可以对示例进行排序:一个基本列表,然后单击右侧的inspect按钮以获取当前订单。应该很容易适应你想要的


注意:我与该网站没有任何关联-只是我在google中快速找到的第一个网站。

JavaScript数组提供了
排序方法,该方法允许传入回调函数来对非字符串进行自定义排序。如果可以在这样的回调函数中执行“阻塞”用户输入收集,则可以完全按照所需的“哪一个更重要”问题集对列表进行排序(可能是一个
窗口。confirm()
问题,如“a比B更重要吗?”)。这将是丑陋的方面,美丽的用户界面,但可以是实际和工作

为了避免在执行排序过程中出现问题回答,您至少可以为列表指定一个开始顺序,执行排序并记录请求的项目对,然后在列表中显示所有这些对。两个项目中哪一个更重要的任何更改都会触发度假,然后用户将被要求只回答那些新的项目(并且还没有被询问)

Tad允许用户拖放来对列表进行排序的想法可能是好的(尽管听起来您想要的是“哪个更重要”流),但我推荐jQuery及其应用程序

要解决哪种排序算法最适合使用,这可能很困难。没有一种算法能够以最少的步数对列表进行可靠排序,因为所需的步数始终取决于项的初始位置。有些排序算法确实更有效,但如果列表一开始就完全按照相反的顺序排序,或者以另一种不利于该算法的方式排序,那么它们仍然可能代价高昂。无论你使用什么方案,总有一些方法是无效的。然而,有些人比其他人好

要处理好这个问题,请从回顾开始。每种排序都有一个最佳情况、平均情况和最坏情况。在调查中,提问者说他的数据有重复多次的排序键,因此回答者建议可能使用插入排序,其最佳情况发生在输入已经排序时。然而,在列表正好相反的情况下,它有一个非常糟糕的最坏情况性能O(n2)。对于任意比较,几乎可以实现的最佳结果是O(n logn)

不过,我有一个减少问题数量的想法:首先用一组H M L(高-中-低)按钮呈现整个项目列表,让用户为每个项目分配总体优先级。这可以由用户非常快速地完成。完成后,分别对每个列表进行排序。这基本上是做一个分布排序,并将大量减少“哪个更重要”问题的数量。我的直觉告诉我,将10个项目分为三个列表比将30个项目分为一个列表要便宜得多

最好的选择可能是合并排序或堆排序。但是你需要自己检查算法。也许您会在开始时使用一种排序,当一切都不正常时,然后对于以后的排序,使用一种在输入已接近有序时执行最佳的方法

在任何情况下,我将列表分为H M L类的想法都应该大大减少使用任何排序方法的步骤数

经过深思熟虑,在我看来,让用户执行相当于插入排序的操作可能是一种合理的方法。为了实现它,不需要让用户一次比较一个未排序的项目和每个已排序的项目,只需让用户将新项目放置在已排序项目的正确位置。要求用户选择一个项目作为开始。它可以是最重要的,也可以是最不重要的,或者在中间的某个地方——这无关紧要。然后,显示一个项目的列表(有足够的空间容纳更多项目),然后一次显示一个项目,让他拖到列表中每个未排序项目所属的位置(或选择其他位置)。完成后,将对列表进行排序。这会提高效率,因为用户不必在每个步骤一次一次读取(并比较)他的列表中的每一个项目——他只需熟悉它,就可以知道其项目是否在列表的顶部、中间或底部,在已组织的列表中。他将能够快速扫描明显不匹配的优先领域,然后专注于他必须仔细权衡的几个项目,以确定p