gpt4 book ai didi

list - 稳定的排序,即最小干扰性排序

转载 作者:行者123 更新时间:2023-12-03 15:21:05 24 4
gpt4 key购买 nike

假设我有一个事物列表(数字,为了使事情在这里简单),并且我想使用一个函数使用SortBy对其进行排序。
例如,以下按最后一位对数字列表进行排序:

SortBy[{301, 201}, Mod[#,10]&]


并注意其中两个数字(即所有数字)的最后一位相同。
因此,退回它们的顺序无关紧要。
在这种情况下,Mathematica将以相反的顺序返回它们。
如何确保打破所有联系,以支持原始列表中商品的订购方式?

(我知道这有点琐碎,但我感觉不时出现这种情况,所以我认为将它放在StackOverflow上会很方便。如果没有人击败我,我会把我想出的一切都作为答案)

尝试使其更易于搜索:以最小的干扰进行排序,以最少的交换次数进行排序,自定义平局决胜,以昂贵的交换进行排序,稳定的排序。

PS:感谢 Nicholas指出这称为稳定排序。它在我的舌尖上!这是另一个链接: http://planetmath.org/encyclopedia/StableSortingAlgorithm.html

最佳答案

问完之后,给了我一个令人满意的解释:

简短的答案:您希望SortBy[list, {f}]得到稳定的排序。

长答案:

SortBy[list, f]按照对列表的每个元素应用f所确定的顺序对列表进行排序,并使用“排序”下说明的规范顺序来打破关系。 (这是documentation for SortBy中第二个记录在案的“更多信息”注释。)

SortBy[list, {f, g}]使用通过将g应用于每个元素所确定的顺序来打破平局。

请注意,SortBy[list, f]SortBy[list, {f, Identity}]相同。

SortBy[list, {f}]不会打破平局(并给出稳定的排序),这就是您想要的:

In[13]:= SortBy[{19, 301, 201, 502, 501, 101, 300}, {Mod[#, 10] &}]

Out[13]= {300, 301, 201, 501, 101, 502, 19}


最后,sakra的解决方案 SortBy[list, {f, tie++ &}]实际上等效于 SortBy[list, {f}]

关于list - 稳定的排序,即最小干扰性排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3304632/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com