以尽可能少的数字表示的基于时间的唯一 ID

问题描述

这个社区解决问题的创造力一直让我印象深刻。我很好奇我们能想出什么样的解决方案。

问题:我想使用满足以下条件的尽可能少的数字创建基于时间的 UID(显然,会有折衷)。

  • 持续时间。 ID 的唯一性保持相关的时间量。例如,YYMMDDHHmm 仅与本世纪相关,并将在 January 1,2100 过时(不是我计划活那么久)。
  • 分辨率。每个 "span"UIDYYMMDDHHmm 只是每分钟唯一。我愿意接受 99 秒作为一个合理的解决方案(也是一个方便的解决方案)。
  • 可读性。时间戳的可读性如何。 YYYYMMDDHHmm 得分很高。
  • 可排序性。 UID 应该可以在标准操作系统上排序。
  • 让我们忽略闰年/秒。

以下是我一直在尝试的一些方法

  1. YYMMDDHHmm10 位数字)
  2. YYddddHHmm(使用 3 位儒略日期,9 位数字)
  3. UNIX 时间。去掉前导数字,总共 9 位。这将在前导数字从 2032 变为 1 之前通过 2ish 工作。如此高的分辨率,但持续时间很短。您也可以删除尾随的两位数字,总共 7 位,但分辨率和持续时间较低。
  4. 获取参考时间,然后根据经过的秒数创建 UID。对于 7 位数的价格,我可以准确计算 31.7 年(丢掉最后 999999999 位数后的 2 秒)。这比 3 的持续时间略长,但仍然不是很好,而且几乎不可读。
  5. 十进制时间(8 位)。如果我将日期表示为百万分之一,则分辨率大约为半分钟。因此,YY.YYYYYY 将给出 79 年的持续时间(直到 2099)和 30 秒的分辨率。它的可读性不高,但足够简单。

我可以使用 hexadecimalbase 36 在更少的位置挤入更多的数据,但我失去了方便地对 UID 进行排序的能力,而且不美观,所以对于思想实验,我将避免这种解决方案。

直观地说,十进制时间似乎最能利用所有可用数据(因为 MM 之类的东西无法使用 13-99 的不动产)。因此,如果没有其他类型的转换或操作,这似乎是最好的答案,但我想有一些创造性的方法可以进一步减少数字的数量

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)