根据人名快速查电话号码?

iwodgirl 2005-09-12 07:20:43
学数据结构遇到的一个问题,根据人名快速查电话号码,数据中只有姓名和电话号码两项!
...全文
5561 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
iwodgirl 2005-09-13
  • 打赏
  • 举报
回复
上面是QuickKeyBoard()在QQ里给我的加复,我觉得他帮我理解或思考了这个问题,我在java中也提了这个相同的问题,100分,QuickKeyBoard()请去接分

http://community.csdn.net/Expert/topic/4264/4264782.xml?temp=.4495966
foochow 2005-09-13
  • 打赏
  • 举报
回复
用STL来做挺方便的...
iwodgirl 2005-09-13
  • 打赏
  • 举报
回复
SkyFire 10:42:30
我看了。
对于冲突的问题,你总该有个互不冲突的key值吧(比如id号什么的)。用那个修正一下。在保证用姓名查找的情况下,如果两个人重名,那么在这个结点中用链表把两个不同的key和信息串起来,顺序查找。
由于对于大量的名单而言,重名现象少的很,因此这里的超小规模(比如5个以内)的顺序查找不会影响总体效率。(如果你的名单中用30%都重名的话,就要修改数据结构了。 ^^)
SkyFire 10:45:05
另外,楼上说的还要输入英文名字什么的,完全没必要,对于中文名字,又有什么不同呢。
“张三丰”是三个汉字的信息,用这个信息做标准建前缀树就是了。
DuoFG 2005-09-13
  • 打赏
  • 举报
回复
同意楼上的
lander9999 2005-09-13
  • 打赏
  • 举报
回复
用hash表比较好
iwodgirl 2005-09-13
  • 打赏
  • 举报
回复
楼上说的好,还有一点我主送你200分

如果两个人的名字相同或读音相同时该如何解决呢?
QuickKeyBoard 2005-09-13
  • 打赏
  • 举报
回复
基础问题,最好最快的办法:用字符串的前缀树查找。
举个例子(以英文的名字为例,中文的类似):
比如有这样一些名字:ab aa bc bd ba cd ca
根据每个字符的不同建立前缀树,即根的结点都是以根为前缀的字符串。
根据上面的名字,建立的是一个森林
a
a b
b
c
d
a
c
a
d
可以用二叉树表示法表示,查找时用广度优先搜索。
对超大的数据库而言,速度快的不得了呢。 ^^
限于时间问题,就不给代码了,iwodgirl (一个勇于学习的人) 兄弟研究一下?
有必要的话可以随时联系。qq:283295408
iwodgirl 2005-09-13
  • 打赏
  • 举报
回复
在输入人姓名时,顺便输入姓名的拼音,如:“张三”,并输入"zhang,san(每个字之间最好有隔开符号便于把姓读音相同的放在一起存储)",

上句的原因是,中国人的名字不同外国人,中文的发音相同时,汉字并不一定相同。

如果不用拼单:
如果已存入了:
张三 0773-2132123
李四 028-32654692
王五 0755-82900555
那么我再存"张七"时,就放在张三的后面吧
张三 0773-2132123
张七 0771-3659841
李四 028-32654692
王五 0755-82900555

其实很多人也许都是这样想的,但这样也存在一个问题,就是所以同姓的人都放在一起了,但如果数据量很大的话,你找“张七”,可能要先找出所有姓“张“的,然后一个一个的比较,姓张的人多时,也会很慢的。

如果用拼音的话,范围会逐渐缩小,适合于大量数据查找

如果谁能做出这个程序就好了,我出200分。
killua_307 2005-09-13
  • 打赏
  • 举报
回复
我觉得还是用分块查找好些吧
不过哈希是快些 不过是怎么判断用哪种解决冲突的办法啊?
zhouhuahai 2005-09-13
  • 打赏
  • 举报
回复
直接用STL中的hash_map(sgi_stl)非常快.

在输入人姓名时,顺便输入姓名的拼音,如:“张三”,并输入"zhang,san(每个字之间最好有隔开符号便于把姓读音相同的放在一起存储)",在查找的过程序中用一种快速的方法先找到姓读音“zhang”的所有人,然后再找到第二个字的读单为"san"的所有人,最后比较所找到的人的名字"zhangsan"的中文是否与“张三”相等,把相等的全列出来。

如果用你的思想,不用这么麻烦,直接查找"zhangsan"即可.并输入"zhangsan".
iwodgirl 2005-09-13
  • 打赏
  • 举报
回复
在输入人姓名时,顺便输入姓名的拼音,如:“张三”,并输入"zhang,san(每个字之间最好有隔开符号便于把姓读音相同的放在一起存储)",在查找的过程序中用一种快速的方法先找到姓读音“zhang”的所有人,然后再找到第二个字的读单为"san"的所有人,最后比较所找到的人的名字"zhangsan"的中文是否与“张三”相等,把相等的全列出来。

上面就是我的思想,大家看下怎么实现呀,分不够可以加啊!
conglingkaishi 2005-09-13
  • 打赏
  • 举报
回复
人家说了只有2项啊,你们的说法似乎都需要加上指针项啊。另外,人家在学数据结构,叫人家去看STL是不是不太合适啊?
qiqi162002 2005-09-13
  • 打赏
  • 举报
回复
STL的MAP,几行代码就能解决问题
nasi00 2005-09-12
  • 打赏
  • 举报
回复
如果想省事的话,直接用STL里面的map了,map是用红黑树写的。

其实这个是典型的索引问题,可以用BTree、RBTree这些BST来做,也可以用Hash来做,一个是基于比较的,理论时间是O(logN),一个不是基于比较的,理论时间是O(1),速度都很快的。
lxk_cool 2005-09-12
  • 打赏
  • 举报
回复
用map行不,把名字当key,电话号码当value..
iwodgirl 2005-09-12
  • 打赏
  • 举报
回复
我是读自考的,刚看数据结构这本书,刚看几页呢,就看到了这个问题,是这样的:

查询时是只会用到姓名,不过关键是存储结构,按《《《中文姓名的拼音》》》》来排,这样查时就不用一个一个的去比较了,便于在有成千上万个项时速度快。

snowbirdfly 2005-09-12
  • 打赏
  • 举报
回复
根据人名快速查电话号码,数据中只有姓名和电话号码两项,有插入、删除、查询功能。~
楼主是不是想用顺序或者链表进行操作啊~~~
应该不是很难~
直接就是链表或者顺序数组的插入、删除、访问~
liqiuhua123 2005-09-12
  • 打赏
  • 举报
回复
用hash最快了.不用做排序.
feitian124 2005-09-12
  • 打赏
  • 举报
回复
用链表
建立链表时按字母序排序,然后再把要查的姓名和链表里的匹配。
按字母排序可以加快查找速度
iwodgirl 2005-09-12
  • 打赏
  • 举报
回复
有插入、删除、查询功能。

69,382

社区成员

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

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