2013-04-01 2 views
0

Может кто-то обеспечить возможный инвариант цикла для следующего простого алгоритма:Каков возможный инвариант цикла

ввода: A[0,...,n-1] и B[0,...,m-1], каждый из них может содержать повторяющиеся элементы

Выход: первая пара (I, j) такой, что A[i] == B[j].

Алгоритм:

for i <- 0 to n-1 
    for j <- 0 to m-1 
     if A[i] = B[j] then 
      return (i,j) 
     endif 
    endfor 
endfor 
return null 

До сих пор, у меня есть только одно решение, которое может или не может работать:

S = {(i,j) | A[0,...,i-1] and B[0,...,j-1] has no common elements}

+0

Являются ли массивы отсортированными? –

+0

Что такое «первая пара ...» - одна с наименьшим 'i'? Самый маленький 'j'? Самый маленький 'i + j'? Существует более чем одно возможное упорядочение пар, поэтому вам нужно будет указать, что это значит, прежде чем вы сможете получить ответ ... Например, если 'A [0] == B [m-1]', который будет «первым» над «A [1] == B [1]»? – twalberg

+0

@twalberg Инвариант петли алгоритма, показанный выше. Я думаю, что с указанным алгоритмом * первая пара * должна быть ясной :) – gongzhitaao

ответ

2

В начале qth итерации второго контура внутри pth итерация первого контура, A[i] != B[j] для всех i = 0...p - 1, j = 0...q - 1.

+0

в основном, ваше решение идентично тому, что я включил в мой вопрос. На самом деле это единственный, который я разработал. Теоретически необходимо найти бесконечные числа ... – gongzhitaao