Я только что закончил домашнюю работу для Computer Science 1 (да, это домашнее задание, но выслушайте меня!). Теперь задание выполнено на 100% и работает, поэтому мне не нужна помощь. Мой вопрос включает в себя эффективность алгоритма, который я использую (мы еще не оцениваем алгоритмическую эффективность, мне просто очень интересно).
В настоящее время функция, которую я собираюсь представить, использует модифицированную версию алгоритма линейного поиска (который я придумал сам по себе!), чтобы проверить, сколько номеров в данном лотерейном билете соответствуют выигрышным номерам, предполагая, что оба числа в билете и набранные числа находятся в порядке возрастания. Мне было интересно, есть ли способ сделать этот алгоритм более эффективным?
/*
* Function: ticketCheck
*
* @param struct ticket
* @param array winningNums[6]
*
* Takes in a ticket, counts how many numbers
* in the ticket match, and returns the number
* of matches.
*
* Uses a modified linear search algorithm,
* in which the index of the successor to the
* last matched number is used as the index of
* the first number tested for the next ticket value.
*
* @return int numMatches
*/
int ticketCheck( struct ticket ticket, int winningNums[6] )
{
int numMatches = 0;
int offset = 0;
int i;
int j;
for( i = 0; i < 6; i++ )
{
for( j = 0 + offset; j < 6; j++ )
{
if( ticket.ticketNum[i] == winningNums[j] )
{
numMatches++;
offset = j + 1;
break;
}
if( ticket.ticketNum[i] < winningNums[j] )
{
i++;
j--;
continue;
}
}
}
return numMatches;
}