Gre*_*tle 8 sorting algorithm optimization computer-science
目标
如何编码描述如何使用可能的最小字节数将静态列表从一个订单重新排序到另一个订单的数据?
原始动机
最初,在使用昂贵的卫星通信来处理传感器数据的问题时,出现了这个问题.一台设备列出了他们正在监控的大约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
Run Code Online (Sandbox Code Playgroud)
假设
正如我所说,项目/硬件不再如此,现在这只是一个学术问题.
挑战!
定义一个编码器
定义解码器
大家好玩.
作为一个学术问题,一种方法是查看 Knuth 的《计算机编程艺术》第二卷的算法 P 第 3.3.2 节,该算法将 N 个对象上的每个排列映射为 0 到 N!-1 之间的整数。如果每个可能的排列在任何时候都有相同的可能性,那么您能做的最好的事情就是计算并传输这个(多精度)整数。实际上,给每个传感器一个 10 位数字,然后将这些 10 位数字打包,这样您就可以将 4 个数字打包到每个 5 字节的块中,效果也差不多。
基于 diff 或现成压缩的方案利用了并非所有排列都同样可能的知识。您可能根据设备对此有所了解,或者您可以通过查看以前的数据来了解是否属于这种情况。如果有效的话就好了。在某些使用传感器和卫星的情况下,您可能需要担心罕见的例外情况,即您的压缩方案会出现最坏的情况,并且您突然需要传输的数据比您预期的要多。
| 归档时间: |
|
| 查看次数: |
260 次 |
| 最近记录: |