这个问题其实不属于C++或某个语言,只是本人不知道放到哪个版块。,由于用C++比较多,所以发在了这个版块,还望见谅
现在遇到的问题是这样的 有一种树形结构例如
10000中国
|
|–200广东省
| |
| |–100深圳市
| |
| |–200广州市
|
|–300湖南省
| |
| |–100长沙市
| |
| |–200岳阳市
……………………………………………..
同一父节点的节点id是保证唯一的,例如 广东省(200)和湖南省(300),但是不同父节点的可能不是唯一的,例如深圳市(100)和长沙市(100), 现在有什么办法可以给每一个市级节点一个全局唯一的id编号吗?同时保证不会超过10位数。
之前本人的想法是 简单的将这些id由上而下拼接起来,例如深圳市(10000200100),这样可以保证唯一,但是却超出数字要求范围了,问一下各位有什么好办法吗?
现在遇到的问题是这样的 有一种树形结构例如
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位编码,一个无符号整形就可以了。
2.中国的省份,目前来看,不会超过100个,所以两位编码即可,考虑扩张,可以延生到三位编码;
3.省里面的市,也可以延生到三位编码。
这样,一共9位编码,一个无符号整形就可以了。
10
省用三位,剩下的都给市就肯定够了吧。