关于数组的搜索问题。 ( 积分: 40 )

  • 主题发起人 主题发起人 AthlonXP
  • 开始时间 开始时间
A

AthlonXP

Unregistered / Unconfirmed
GUEST, unregistred user!
我有一个问题如下:
1) 我从两个文件中读取数据,分别放入有两个数组A和B中,该两个数据均为动态数据,其大小是不一定的。
2) 对于B中的每一个元素,我想去看在A中存不存在,如果存在则记录下他的位置。

问题主要就是上面了,看上去很容易实现,不过当A和B都很大的时候花的时间很多,不知道有没有快的方法呢?请大侠们指教。
 
我有一个问题如下:
1) 我从两个文件中读取数据,分别放入有两个数组A和B中,该两个数据均为动态数据,其大小是不一定的。
2) 对于B中的每一个元素,我想去看在A中存不存在,如果存在则记录下他的位置。

问题主要就是上面了,看上去很容易实现,不过当A和B都很大的时候花的时间很多,不知道有没有快的方法呢?请大侠们指教。
 
对a进行一下排序
 
试用多线程,多块搜索。
 
这是没有办法的,因为涉及到遍历,一定是比较慢的。
如果说用排序也是一个可行的办法,就象数据库那样。可以在读入时先做。然后在跟B对比时用二分法找,应该比较快。
多线程适用于一次性找出B中所有元素对应的,如果只找一个就没有那个必要了。
 
我不同意3h的说法:
可以将文件分块,使用块+多线程来搜索
 
哈哈,这个问题我也碰到过:)我一直写的就是没有DELPHI的LOOKUP字段快,不知道LookUp字段是怎么写的?我觉得这个与LookUp字段是一个原理。没有时间看VCL的源代码,谁有知道,告诉我好吗?
 
如果不用数据可以用别的东西吗?
我的要求是:
有两个文件如下:
A:为一个规定上下限的文件,
Name 上限 下限
vth 50 60
Isat 0.5 0.6
beta 33 56
......
B:为一个数据文件,
Name value
beta 45
isat 0.55
beta 46
isat 0.56
vth 59
vth 90
...........
我想知道在B中那些数据点超规范了,并确认该数据点在文件中的位置(记录下第几行)。
我原本的做法是:
1)对A和B的参数分别装入一个数组。
2)对B中的每一个原素在A 中找到相应的规范并比较,如不在规范中则统计超规范的个数并记下行数。
对于这样一个问题,大家有什么看法呢?



 
用TLists类,因为它提供了Indexof这个方法,它的方法应该是很不错的,要不Borland也不能这么写,呵呵
 
我以前在csdn上回答过类似的问题,不想再写一次代码了,解决方案是这样的:利用Hash表的数据结构,先建立数组a的Hash表结构,然后再用相应的Hash函数检查数组b中的元素是否在Hash表中。速度相当的快。
 
呵呵,我是个业余的,哈稀结构还是当年在学校上数据结构的时候听说过,根本不知道是什么东西,如果大侠不想写代码不知可否告知那可找到相应的例子呢?
 
A,B都是规范的数据表结构,为什么不直接导入数据库的两个数据表中?
这样的话,用SQL进行查询和比较,效率可就快多了。
建议试试!
 
不会用SQL啊,没有用过。我不是做程序的,我做半导体制造的啊。
 
正确的方法是用HASH或就键值做索引。

TLIST的INDEXOF是顺序遍历,效率最差的一个。
 
同意楼上
看看此贴,跟你的问题相同
http://community.csdn.net/Expert/TopicView1.asp?id=3660145
 
如果数据不超过3.2万;

用 List 控件,有 API 函数 findstring... 很快的;
 
谢谢大家,还在学习中。
 
后退
顶部