> -- Илья Ермаков писал(а):
> . Мультипоиск. В последовательности байт найти первое вхождение какого-либо из искомых слов.Это же просто три вложенных линейных поиска совершенно не запутанных друг с другом. Вот смотрите:## Код:
```
PROCEDURE MultiFind* (IN source: ARRAY OF BYTE; begin, end, wordCount: INTEGER; IN words: ARRAY OF ARRAY OF BYTE; IN lens: ARRAY OF INTEGER; OUT word, pos: INTEGER);
  VAR w, j: INTEGER;
BEGIN word := -1; pos := -1;
  WHILE begin < end DO
    w := 0;
    WHILE w < wordCount DO
      IF (begin + lens[w] <= end) & (source[begin] = words[w][0]) THEN
        j := 1; (* это оптимизация: первую букву j=0 уже проверили в IF без организации тяжёлого WHILE *)
        WHILE (j < lens[w]) & (source[begin + j] = words[w][j]) DO INC(j) END;
        IF j = lens[w] THEN
          word := w; pos := begin; (* запоминаем ответ *)
          w := wordCount; begin := end (* симулируем EXIT *)
        END
      END;
      INC(w)
    END;
    INC(begin)
  END
END MultiFind;
```
Раз нет запутанности, то никакой "дейкстра" тут не нужен.

(модератор) Обсуждение оптимизации выделено в отдельную тему:viewtopic.php?f=86&t=3776