一个关于索引的问题 火线求救!!!!!

aohan_zhang1 2008-02-25 07:52:52
有一个电话号码前缀和地区的表大致如下:
手机号码前缀 手机前缀长度 电话号码前缀 电话前缀长度 地区
1373902 7 743 3 湖南吉首
1591405 7 755 3 广东深圳
...........
包含全国的地域,大概有6万多行。

要求:来电(手机或电话)显示的时候,要求能根据号码前缀要显示号码所在地区的名称。

请问各位大侠: 用C怎样建立数据结构可以达到既时间和空间都节省的效果??
...全文
188 10 打赏 收藏 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
erwin1984 2008-03-03
  • 打赏
  • 举报
回复
用类字典树和Hash算法实现,时间复杂度和空间复杂度均不大。
wjwwgh 2008-03-03
  • 打赏
  • 举报
回复
把手机号码前缀和电话号码前缀分开
不如建两个数据结构
typedef struct
{
long mobPre;//手机号码前缀
int moblong;//手机前缀长度
char cityArea[20];//地区
}MOBNUMBERTYPE;

typedef struct
{
long phoPre;// 电话号码前缀
int pholong;//电话前缀长度
char cityArea[20];//地区
}PHOMOBNUMBERTYPE;

zp1234567 2008-03-03
  • 打赏
  • 举报
回复
用variable code 压缩.
压缩后的数据不但可以节省空间,还可以节省时间.(一般情况下 DESK->MEMORY->CPU CACHE 节省的时间要比 decode 消耗的时间多)
另外的 我建议做多个表 象137,159这样的开头就没必要记录了,还有前缀的长度也没必要记录.这些都很节省空间的.
hustwf 2008-02-26
  • 打赏
  • 举报
回复
根据前缀构造一棵树,每读入一个数字,就往相应的树枝走,找到叶子就行了。算法复杂在树的构造上。
查找应该是最快的。空间上可能需要稍大一点点。

节点数据结构:
typedef struct node{
struct node* path[10];
char* address;
}NODE;



树的结构如图
root
1 2...
1 2...
1234567890 1234567890 ...........
... ...
Jim_King_2000 2008-02-26
  • 打赏
  • 举报
回复
把一个省的前缀集中在一起,构造一个二级哈希表。
szduweibing 2008-02-26
  • 打赏
  • 举报
回复
将号码前缀排序,存储在文件中,由于都是定长的,故二分查找很快
星羽 2008-02-25
  • 打赏
  • 举报
回复
你可以改这个表文件的结构吗?

比如表文件的数据是排序过的,然后再建立一个索引文件,等等
Mnky 2008-02-25
  • 打赏
  • 举报
回复
手机号码前缀,从尾数开始,一位一位筛选,筛到就剩一个就不用再晒了,类似查字典的方法,不要整个字串比较。
电话其实也可以这样,不用特意加上“华东”“华南”等带有意义的判断,直接判断某一位,类似hash表。
lockhall 2008-02-25
  • 打赏
  • 举报
回复
可以先再划分模糊

比如先找到华东地区,然后上海

这样索引效率高点
aohan_zhang1 2008-02-25
  • 打赏
  • 举报
回复
我的想化是:
建立数据结构:
typedef struct
{
long mobPre;//手机号码前缀
long phoPre;// 电话号码前缀
int moblong;//手机前缀长度
int pholong;//电话前缀长度
char cityArea[20];//地区
}NUMBERTYPE;

const NUMBERTYPE numberType[]
{
{1373902, 7 , 743, 3 , "湖南吉首"},
{1591405 , 7 , 755 , 3 , " 广东深圳 "},
.......
{0,0,0,0,NULL},

};
这样做的话耗的内存很大,且查找复杂度比较大。


详情可查看下方数据集可视化效果。 【数据集概况】 · 检测类别(中文):[自行车(bicycle), 汽车(car), 牛(cow), 鹅(goose), 马(horse), 人(human), 摩托车(motorbike), 羊(sheep), 危险标志(ss danger), 左转标志(ss left), 禁止鸣笛标志(ss no horn), 停车标志(ss parking), 右转标志(ss right), 停止标志(ss stop), 人行横道标志(ss xwalk), 绿灯(tl green), 关灯(tl off), 红灯(tl red), 黄灯(tl yellow)] · 训练集:1365 张 · 验证集:90 张 · 测试集:62 张 · 总计:1517 张 该数据集基于室内模拟交通场景构建,聚焦于交通标志、车辆及动物等目标的精准识别,为智能交通系统训练提供高质量样本,具有显著的行业应用价值与技术研究意义。训练集、验证集与测试集分别包含1365张、90张与62张图像,数据分布比例合理,训练集规模充足以保障模型学习充分,验证集与测试集用于模型性能评估,有效支撑模型迭代优化。所有目标均经过严格标注,边界框绘制精准,类别标注规范统一,无模糊或错误标注情况,确... 【训练曲线与评估图】 【模型训练配置】 参数 | 值 模型 | yolo26n 训练轮数 | 100 epochs 输入尺寸 | 640x640 批次大小 | 24 优化器 | auto 初始学习率 | 0.01 训练设备 【关键指标汇总】 训练了 41 个 epoch,最终轮指标: 指标 | 数值 mAP50 | **0.9644** mAP50-95 | 0.7193 Precision | 0.9278 Recall | 0.9049 train/box_loss | 0.8936 tra...

70,040

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧