【问题标题】:Philosophical Sorting Idea [closed]哲学排序思想[关闭]
【发布时间】:2014-10-01 04:08:12
【问题描述】:

对数组进行排序意味着引入顺序,还是恢复数字序列中固有的顺序?

这是我在网上阅读的一些算法分析材料中提出的一个想法,它让我想知道哪个是真的。我可以想到双方的论点,但有没有比另一个更“正确”的答案?

【问题讨论】:

  • 对您阅读的内容有任何参考吗?
  • 这完全取决于您用于订购该数组的标准。因此,没有“固有的”数字序列。例如,假设您想根据数组的平方(从最小值到最大值)对数组进行排序,但您有负数。所以a=[-3 -1 0 1 2 3] 你会说它是订购的吗?如果您按照我所说的方式订购:a_sorted=[0 1 -1 2 -2 3](或a=[0 -1 1 -2 2 3]。排序意味着您为元素付出了任何代价,因此您将这些元素放置为单调增加(或减少)的成本。
  • 如果 order 表示信息量(或熵量的倒数),那么排序实际上是在破坏序数信息 - 因为有序数组可以简化为一个集合(允许重复values) 和排序函数,而未排序的数组必须包含有关每个元素的序数位置的信息..
  • @JaviV 我有两个你写的问题:首先,对于那里的数字 is 一个“固有”顺序,规范/自然(双关语)顺序@987654325 @。其次,将排序顺序解释为“单调增加 w.r.t. 一些成本”不够笼统(它假定了数字的概念,而通常和更基本的定义只是根据顺序 关系)。
  • @delnan 完全同意你的看法。但是,最一般的排序并不总是按照固有的数字排序进行排序。无论如何,我认为你和我说的一样,但更正式:)

标签: algorithm sorting sequence


【解决方案1】:

这是一个思想实验。 [注1]

假设我有一个非常大的未排序行文件,其中一些是重复的。我想要行的唯一值的随机样本。而且我有一个通用的排序函数。

现在,我可以对文件进行排序,删除重复项,然后随机抽样。但这似乎比我真正需要的要多。

相反,如果我根据排序键对文件进行排序,排序键是每行随机选择的哈希函数? (顺便说一下,这个想法不是我的。它实际上是由 GNU sort 实现的。)现在,我只需要删除重复项,直到我完成样本的大小。

这可能不是解决我的问题的最佳解决方案,但它是一个合理的解决方案,它利用了现有工具的一些优势。但这不是这个问题的重点:重点是没有任何可以想象的方式可以说该算法进行的排序操作是值的固有属性;事实上,它只是大量(尽管有限)可能的类似排序操作之一,其中每一个操作(可能)产生不同的顺序。


注意事项:

  1. 其实这不是思想实验;它基于a question elsewhere on SO,但我们可以将其视为思想实验:)

【讨论】:

  • technically,我不会考虑将哈希函数的选择作为排序的一部分,而是作为单独的先前步骤。那么排序本身就具有相当的确定性和可重复性
  • @Aprillion:我希望我很清楚哈希函数是随机选择一次用于整个排序的。但是排序并没有揭示数据的任何属性。您可以说它揭示了数据(短暂)转换的属性,但您同样可以说使用的比较函数是排序算法的参数,而不是数据固有的。后者是我的立场。如果使用的比较函数是一致的、完整的、反对称的和传递的,则排序工作。但在这些限制内,任何东西都可以使用。
  • 你很清楚这一点。但是it will be different each time, depending on the randomly-selected hash function 声明可以简化为it will be different if you choose a different sorting function each time - 这很明显
  • @Aprillion:好的,尝试编辑。
  • 啊,我相信有无数种可能的排序操作会产生相同的顺序{a<b, a*2<b*2, ...} 和/或不同的顺序。但是+1,因为我同意排序不是任何事物所固有的:)
猜你喜欢
  • 1970-01-01
  • 2023-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多