快速检索的算法(200分)

  • 主题发起人 主题发起人 江远
  • 开始时间 开始时间

江远

Unregistered / Unconfirmed
GUEST, unregistred user!
大家好!
大家可能都曾用过KV3000或瑞星等杀毒软件,它们需要读取大量的文件,并进行快速处理。
我现在也想对一些数据进行快速处理,比如看某一个参数是否超过了规定的范围,
不知道那位大虾知道如如何提高对数据进行快速处理的速度?[?]
 
这个无法详细的回答,如果你面对的数据库结构比较简单,那就自己拌代码直接读写文件的
物理结构,通过通用成型的控件、过程、表控件等模快来读写数据文件当然很慢了,它
们为了适应的广泛性,会经过很多运算,速度自然慢了。
我有类似的体验,通过数据库管理系统很慢,但自己编代码读文件,虽然代码不能胜任别
的库读写任务,但做针对文件结构的读写速度快了几十倍!
 
首先感谢mmww的回答,我想我没有说清楚,我现已将数据读到内存中,但需对数据进行判断,如某一参数(该参数
在不同的时刻有很多值)的所有数值中是否有大于1000等的,正常情况下需对此参数的每一
个数值从头到尾判断一遍。由于我处理的数据中参数较多,且每个参数的值较多,而判据也
不少,所以希望有较快的算法。
 
你的意思是不是一个多对多的比较?或者说一个行矩阵和一个列矩阵的乘积?
[a,b,c]*[x,y] -> { a=x?, a=y?, b=x?, b=y?, c=x?, c=y? } 是这样吗?
 
我在对飞行数据进行处理,以判断飞行过程中的各种事件(是否故障和各个统计等),每个
事件(故障)都是由一定的条件决定的,如“高度超高”事件的判据是“高度>15000”,
该条件持续成立5秒即认为出现了“高度超高”事件,由于参数个数、数据量和判据条数都
较多,所以想快一点。
 
是否可以这样理解:

有一个发生事故时的全部状态的记录
TEventRecord=Record
Alt:Integer;
AirSpeed:Integer;
AirPressure:Float;
End;

有一个状态标准列表
Alt: 500-30000 (m)
AirSpeed: 20-720 (m/s)
AirPressure: 0.03-0.12 (MPa)

然后把大量的TEventRecord类型的记录和标准列表比较,不在范围内的就记下来或计数。
是这样吗?
 
f:=CreateFile(pchar(s),GENERIC_READ ,0,
nil,OPEN_EXISTING,FILE_ATTRIBUTE_ARCHIVE,0);
Map:=CreateFileMapping(F,NiL,PAGE_READONLY,0,0,Nil);
p:=MapViewOfFile(Map,FILE_MAP_READ,0,0,0);
 
TO fatalexception:
你理解的基本正确,实际上可能更复杂一些
TO jsxjdz:
对不起,我不明白你的意思,能解释一下吗?

谢谢各位的回答!
 
如果是在文件中搜索,可以用文件映像,这样可以消除搜索的边界问题。
 
状态参量都是数值型吗?有多少个?记录数有多少个?
给个范围。尽快啦。
 
我自己想了想,最后觉得用多线程比较好。每个判据一个线程,确实快了许多。
但是我不知道这些线程何时结束。
那位知道如何监控线程?
另外,我对用线程对控件进行控制也不太清楚,希望大家帮忙。(有些文不对题了)
To fatalexception:
我每次选中若干个文件,每个文件有30-100个参数,几十个判据。每个文件的
大约有2000-10000帧的数据。(我的电话最近有些问题,现在网速是26K.有时还上不了)
TO jsxjd:
我已把数据读到数组中。
 
谢谢各位!
(难道大富翁论坛无高手吗?)
 
后退
顶部