2010-01-15 19 views
8

目标如何计算将一个排序顺序转换为另一个排序顺序的绝对最小变化量?

如何描述如何重新排序从一阶的静态列表使用可能的最小字节量另一个为了将数据编码?

原动机

本来这问题的一个问题工作中继使用昂贵的卫星通信的传感器数据而产生的。一个设备有一个约1,000个他们正在监控的传感器的列表。传感器列表无法更改。每个传感器都有一个唯一的ID。所有数据都在内部进行记录以进行最终分析,最终用户每天需要的唯一东西是哪个传感器按照哪个顺序启动。

整个项目已被废弃,但这个问题似乎太有趣而无法忽视。此前我也谈到了“交换”,因为我在考虑排序算法,但实际上这是重要的总体顺序,达到该顺序所需的步骤可能无关紧要。

数据如何被责令

在SQL方面,你可以认为它是这样的。

**Initial Load** 

create table sensor (id int, last_detected datetime, other stuff) 
-- fill table with ids of all sensors for this location 

Day 0: Select ID from Sensor order by id 
    (initially data is sorted by the sensor.id because its a known value) 

Day 1: Select ID from Sensor order by last_detected 
Day 2: Select ID from Sensor order by last_detected 
Day 3: Select ID from Sensor order by last_detected 

假设

  • 起始列表和结束列表由完全相同的一组项的
  • 每个传感器具有唯一的ID(32位整数)
  • 大小的名单将大约有1,000个项目
  • 每个传感器可能每分钟发射多次或根本不发射天
  • 只需要中继ID排序顺序的更改。
  • 计算优化解决方案的计算资源便宜/无限制
  • 数据成本很高,大概是每千字节一美元。
  • 数据只能作为整个字节(八位位组)被发送递增
  • 的第0天顺序由发送者和接收者已知开始与
  • 现在假设该系统的功能完好并且没有错误检查是必需的

正如我所说的项目/硬件没有更多,所以这现在只是一个学术问题。

挑战!

定义编码器的

  • 鉴于A. n天排序顺序
  • 鉴于B.日N + 1排序次序
  • 返回C.字节的集合,描述如何使用可能的字节数最少的甲转换为乙

定义解码器

  • 鉴于A. n天排序顺序
  • 鉴于B.的集合字节
  • 返回C.天N + 1排序顺序

玩得开心大家。

+0

你确定这是一个排序问题吗?如果我正确读取,这听起来更像是一个压缩问题 - 您想知道什么设备在使用最少存储时触发。另外,如果我从字面上理解,我不清楚你指的是“排序顺序”。它看起来像是在问如何对数据进行排序,但我没有看到有关排序问题的任何说明 - 何时发生了什么,发生了多少次,等等。不知道我们在寻找什么样的输出因为,很难告诉你我们如何分类。 – atk 2010-01-15 20:38:13

+1

这似乎很像差异。你称之为“排序顺序”实际上只是传感器ID的任意列表。 – 2010-01-15 21:29:50

+1

换句话说,将列表放在一个文本文件中;你的编码器是'diff',你的解码器是'patch'。不管你喜欢如何压缩补丁。有关于差异算法的数百个问题,但维基百科可能会更好地阅读。 http://en.wikipedia.org/wiki/Diff#Algorithm – 2010-01-15 21:38:12

回答

1

作为一个学术问题,一种方法是查看Knuth计算机编程艺术II卷的算法P第3.3.2节,它将N个对象上的每个置换映射为0到N!-1之间的整数。如果每个可能的排列在任何时候都是相同的,那么你可以做的最好的就是计算和传输这个(多精度)整数。在实践中,给每个传感器一个10位数字,然后打包这10位数字,以便你有例如打包到5个字节的每个块中的4个数字几乎都是一样的。

基于差异或现成压缩的方案利用了并非所有排列的可能性相同的知识。您可能根据设备了解此情况,或者通过查看以前的数据来查看是否属实。很好,如果它的工作。在一些使用传感器和卫星的情况下,您可能需要担心罕见的例外情况,如果您的压缩方案出现最差情况,并且突然有更多的数据传输超过您的议价范围。

+0

我特别同意这第一部分。如果你有一种方法来对每个可能的排列进行编号(并且从该编号产生排列),那么需要传送的全部是下一个排列的编号。 – 2010-01-21 22:51:29

+0

事实上,你可能只是在排列的ID之间存在差异,因为平均而言传输的信息会少一些。另外,如果某些排列的可能性更大,则可以重新排列排列的排序以使这些排列靠得更近当与仅发送置换ID之间的差异组合时,这将使得传输的信息更少。这里的关键在于,事先知道已经有很多信息传输,每个传感器都有唯一的识别号码。 – 2010-01-22 21:25:00