目标如何计算将一个排序顺序转换为另一个排序顺序的绝对最小变化量?
如何描述如何重新排序从一阶的静态列表使用可能的最小字节量另一个为了将数据编码?
原动机
本来这问题的一个问题工作中继使用昂贵的卫星通信的传感器数据而产生的。一个设备有一个约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排序顺序
玩得开心大家。
你确定这是一个排序问题吗?如果我正确读取,这听起来更像是一个压缩问题 - 您想知道什么设备在使用最少存储时触发。另外,如果我从字面上理解,我不清楚你指的是“排序顺序”。它看起来像是在问如何对数据进行排序,但我没有看到有关排序问题的任何说明 - 何时发生了什么,发生了多少次,等等。不知道我们在寻找什么样的输出因为,很难告诉你我们如何分类。 – atk 2010-01-15 20:38:13
这似乎很像差异。你称之为“排序顺序”实际上只是传感器ID的任意列表。 – 2010-01-15 21:29:50
换句话说,将列表放在一个文本文件中;你的编码器是'diff',你的解码器是'patch'。不管你喜欢如何压缩补丁。有关于差异算法的数百个问题,但维基百科可能会更好地阅读。 http://en.wikipedia.org/wiki/Diff#Algorithm – 2010-01-15 21:38:12