You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于{1,2,3,4,5}的三元组唯一编号与可逆映射方案问询

解决方案:三元组与唯一编号的双向映射

当然存在这种分配方法!这本质上是要给每个有序三元组建立一个唯一的整数双射(一一对应),利用进制转换的思路就能轻松实现,而且天然支持排序——编号的大小可以直接对应三元组的某种有序排列(比如字典序)。

核心思路

因为每个位置的元素都有5种可能(1-5),我们可以把三元组看作一个5进制数,但需要先把1-5的取值转换为0-4来适配标准的进制计算逻辑,之后再做反向转换即可。


方法一:按字典序映射(先比第一个元素,再第二个,最后第三个)

1. 三元组 → 唯一编号

假设三元组是 (a, b, c),其中 a, b, c ∈ {1,2,3,4,5}:

  • 第一步:把每个元素减1,得到 a' = a-1,b' = b-1,c' = c-1(此时每个值的范围是0-4)
  • 第二步:计算编号:
    编号 = a' * 5² + b' * 5 + c' + 1
    
    (加1是为了让编号从1开始;如果接受从0开始编号,可以去掉最后的+1)

举几个例子验证:

  • 三元组 (1,1,1):a'=0, b'=0, c'=0 → 编号 = 0 + 0 + 0 +1 = 1
  • 三元组 (1,1,2):c'=1 → 编号 = 0 +0 +1 +1 =2
  • 三元组 (5,5,5):a'=4, b'=4, c'=4 → 编号 = 425 +45 +4 +1 = 125(刚好是总三元组数量)

2. 编号 → 对应三元组

假设编号为 N(范围1-125):

  • 第一步:先减1得到 N' = N-1(把编号转换为0起始的索引)
  • 第二步:计算最后一位的转换值:c' = N' % 5,对应三元组的c = c' +1
  • 第三步:计算剩余值 N1 = N' // 5
  • 第四步:计算第二位的转换值:b' = N1 %5,对应三元组的b = b' +1
  • 第五步:计算第一位的转换值:a' = N1 //5,对应三元组的a = a' +1
  • 最终得到三元组 (a,b,c)

举例子验证:

  • 编号125:N'=124 → c'=124%5=4 → c=5;N1=124//5=24 → b'=24%5=4 → b=5;a'=24//5=4 → a=5 → 得到(5,5,5)
  • 编号3:N'=2 → c'=2%5=2 → c=3;N1=2//5=0 → b'=0%5=0 → b=1;a'=0//5=0 → a=1 → 得到(1,1,3)

自定义排序映射

如果想要编号对应其他排序规则(比如优先比较第三个元素,再第二个,最后第一个),只需要调整公式里的权重即可。比如:

编号 = c' * 5² + b' *5 + a' +1

这样编号的大小顺序就会对应三元组按c→b→a的优先级排序,灵活度很高。


内容的提问来源于stack exchange,提问作者budi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 04:07:07