怎么样 将三个数字组合成一个唯一确定的 数字? 同时保证不超出范围

C++语言 码拜 8年前 (2017-05-02) 2903次浏览
这个问题其实不属于C++或某个语言,只是本人不知道放到哪个版块。,由于用C++比较多,所以发在了这个版块,还望见谅
现在遇到的问题是这样的  有一种树形结构例如
10000中国
|
|–200广东省
|               |
|               |–100深圳市
|               |
|               |–200广州市
|
|–300湖南省
|               |
|               |–100长沙市
|               |
|               |–200岳阳市
……………………………………………..
同一父节点的节点id是保证唯一的,例如 广东省(200)和湖南省(300),但是不同父节点的可能不是唯一的,例如深圳市(100)和长沙市(100), 现在有什么办法可以给每一个市级节点一个全局唯一的id编号吗?同时保证不会超过10位数。
之前本人的想法是 简单的将这些id由上而下拼接起来,例如深圳市(10000200100),这样可以保证唯一,但是却超出数字要求范围了,问一下各位有什么好办法吗?
解决方案

10

设最大深度为X,则每个结点ID的最大长度l=10/x

10

每层都是咋编号的?
不知道的话,那就遍历一遍重新编一个号。不超过一亿个节点十位就够了。

10

1.地球上的国家只有200多个,目前看来,也不会超过1000,所以三位编码即可,中国:100。地球之外的,可以考虑在前面继续加前缀,无前缀默认为地球;
2.中国的省份,目前来看,不会超过100个,所以两位编码即可,考虑扩张,可以延生到三位编码;
3.省里面的市,也可以延生到三位编码。
这样,一共9位编码,一个无符号整形就可以了。

10

省用三位,剩下的都给市就肯定够了吧。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明怎么样 将三个数字组合成一个唯一确定的 数字? 同时保证不超出范围
喜欢 (0)
[1034331897@qq.com]
分享 (0)