2010-09-25 3 views
1

Как написать эффективный алгоритм для поиска массива подмножества целых чисел в другом массиве в 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

Вместо того, чтобы жестко кодировать размер, вы можете использовать 'sizeof (a)/sizeof (a [0])'. –

+0

Спасибо за отзыв, хотя это пример, и в моей программе у меня есть 'struct', который управляет динамической памятью плюс длина указателя. –

+0

Я всегда думал, что C не знает размер массива. Это определенно не может определить длину массива. Какая разница? – AlcubierreDrive

ответ

6

Существует несколько известных, эффективных string searching algorithms, и все они будут работать для этой цели. Нет никакой разницы между массивом целых чисел и массивом целых чисел, каждый из которых был назначен символьным представлениям, если подпоследовательность - это то, что вы ищете.

Если ваша проблема действительно такая маленькая, как то, что вы опубликовали, вероятно, не стоит ничего использовать, кроме грубой силы, но я предполагаю, что это всего лишь игрушечный пример того, что вы хотите сделать.

+0

Спасибо за это! Извините, что не нашел, что было так близко ко мне. –

Смежные вопросы