Вход: У меня есть некоторые массивы, например:граф перестановок - магазин счетчик в массиве
1, 2, 3, 4, 5
2, 1, 3, 4, 5
3, 2, 5, 4, 1
5, 4, 3, 1, 2
.....
Все они являются не являющиеся Повторяющимися перестановками из 5 цифр - 5C5. Строки могут повторяться, но любая цифра в ряду уникальна.
Цель: Подсчитайте, сколько массивов каждого типа (перестановка) находится во входных данных.
Мои мысли: 5C5 говорит, что существует только 120 уникальных строк. Поэтому я могу хранить счетчики в массиве int[120]
. И увеличивайте их при чтении ввода.
Мой вопрос: Есть ли эффективный алгоритм для преобразования (хэш) этого массива в индекс массива?
Предпочтительный язык - C, с его указателями и ручным управлением памятью. В безупречном, я пытаюсь сделать что-то вроде:
FILE *f;
int counters[120] = {0};
char seq[20];
parse_line(f, seq); #scans and parses string into array
counters[hash(seq)]++;
PS: Я был вдохновлен на этот вопрос путем решения «UVA 157 - переработка». Позже я увидел решения и понял, что я неправильно понял задачу, но вопрос остался без ответа.
5P5 = 120, 5C5 = 1 – BLUEPIXY
Спасибо, для исправления. Я изучал только C и A, поэтому не знал, что перестановка написана как P. – manitou