我如何编写一个有效的算法来搜索C中另一个数组中的整数子集数组?例如:
unsigned a[] = {42, 72, 61, 1023, 84, 42, 42, 193, 302, 72};
unsigned long al = 10;
unsigned b[] = {61, 1023, 84};
unsigned long bl = 3;
我尝试了一种蛮力方法,循环遍历a
,然后在b
为a[n]
时循环b[0]
,但如果匹配失败则再回溯半。这似乎是我能想到的最好的,但我确信必须有更快的方式。
答案 0 :(得分:6)
有几个着名的,高效的string searching algorithms,它们都将为此目的而工作。如果一个子序列是你正在寻找的,那么整数数组和一个整数数组之间几乎没有区别,每个整数都被分配给字符表示。
如果你的问题真的像你发布的那样小,那么除了蛮力外,它可能不值得使用,但我认为这只是你想要做的一个玩具示例。