求一个简单的算法

jill_yang 2000-07-14 10:21:00
加精
我有两个数组,一个数组记录“中”字在一篇文章中的偏移地址,另一个记录“国”字在一篇文章中的偏移地址,例A[]是记录“中”字偏移地址的数组,A[0]=1,A[1]=6,B[]是记录“国"字的数组,假设两个数组的大小都已知,现在要得出一个数组记录包含“中国”这个词在文章中的偏移地址,这个算法速度越快越好
...全文
258 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
jadedrip 2000-12-28
  • 打赏
  • 举报
回复
用二分查找?
jill_yang 2000-07-14
  • 打赏
  • 举报
回复
这样是可以,是否有性能更好的算法
附上我写的一个算法
flag=0;
k=0;
for (i=0;i<X;i++)
{
for(j=flag;j<Y;j++)
if(B[j]=+A[i]+1)
{
C[k++]=A[i];
flag=j+1;
break;
}
}
wistaria 2000-07-14
  • 打赏
  • 举报
回复
A,B数组均有序,从小到大
i=0,j=0,k=0
do{
for(;(j<J)&&(B[j]-A[i]!=1);j++);
if(B[j]-A[i]==1)
{
C[k]=A[i];
k += 1;
}
i += 1;
}while(i<I&&j<J);




jill_yang 2000-07-14
  • 打赏
  • 举报
回复
A,B数组均有序,从小到大
MadLee 2000-07-14
  • 打赏
  • 举报
回复
AB是否有序?
ta 2000-07-14
  • 打赏
  • 举报
回复
这是一个典型的双步进循环. 方法很简单: 示意如下:
A,B数组均有序,从小到大 结果放到 C
i=0,j=0,k=0
do
{
if (B[j]-A[i]==4) {C[k++]=A[i++];j++;}
elseif (B[j]-A[i]>4) i++; else j++;
}while(i<I&&j<J);

这段代码最好用汇编来写速度最快:

可以利用一个
do
{

__asm
{
mov eax,B[j]
sub eax,A[i]
sub eax,4
je l1:
ja l2:
}
j++;
__asm jmp L4;
l1:
C[k++]=A[i];j++;
l2:
i++;
L4;
}while(i<I&&j<J);

注意编译后代码数组下标应该是[i*4]. 如果不是就添上. 这取决于编译开关.

sun2000 2000-07-14
  • 打赏
  • 举报
回复
有序:
A[]中的个数为nCntA;
B[]中的个数为nCntB;
C[]中的个数为nCntC;
int nCntC=0;

for(int j=0, i=0; i<nCntA && j<nCntB ;)
while((A[i]<B[j]-1) && i<nCntA ) i++;
while((B[j]<A[i]+1) && i<nCntA && j<nCntB) j++;
if (A[i]+1==B[j])
{
C[nCntC++]=A[i];
i++;
j++;
}
}

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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