Как отобразить уникальные числа с их частотами, встречающимися в матрице? - PullRequest
0 голосов
/ 25 августа 2010

У меня есть матрица с некоторым номером:

1 2 3 6   
6 7 2 1   
1 4 5 6

И программа должна отображать все разные числа с собственной частотой, например:

1 -> 3   
2 -> 2   
3 -> 1  
4 -> 1   
5 -> 1   
6 -> 3
7 -> 1

Пожалуйста, помогите мне

Ответы [ 3 ]

1 голос
/ 25 августа 2010

Вы, вероятно, имеете в виду

1->3

Создание вектора (массива), заполненного нулями, имеющего размер максимального значения в матрице (например, [0..9]), обход по всей матрице и с каждым шагом шага индекса вектора, равного фактическому числу.

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

1    0
5    0
15   0 
142  0
2412 0

И увеличивайте значения во втором столбце и расширяйте эти строки матрицы каждый раз, когда вы находите новое число.

0 голосов
/ 26 августа 2010

Вот пример того, как это можно сделать в Python.dict имеет следующий формат: {key:value, key2:value2}.Таким образом, вы можете использовать это, чтобы у вас было что-то вроде {'2':3}, чтобы оно сообщало вам, сколько чисел имеет число случаев. (я не предполагаю, что вы собираетесь использовать Python. Просто чтобы вы понимали код ... возможно)

matrix = [[1,5,6],
          [2,6,3],
          [5,3,9]]
dict = {}

for row in matrix:
    for column in row:
        if str(column) in dict.keys():
            dict[str(column)] += 1
        else:
            dict[str(column)] = 1

for key in sorted(dict.keys()):
    print key, '->', dict[key]

Надеюсь, вы сможете понять, что это делает, Эта кодовая панель показывает вывод и приятную подсветку синтаксиса.

(Я не понимаю, почему SO не выравнивает код должным образом ... он моноширинный, но не выровненный: S ... оказывается, потому что я использовал IE6 (это единственный браузерна работе: - (

0 голосов
/ 25 августа 2010

Используя указатели, эта проблема уменьшается от матрицы к одномерному массиву.Поддерживать одномерный массив, размер которого равен общему числу.элементов в матрице, скажем это COUNT .Инициализируйте его с нуля.Теперь начните с первого элемента матрицы и сравните его со всеми остальными элементами.Если мы используем указатели, то эта проблема переходит в обход 1D-массива и нахождение количества вхождений каждого элемента.Для обхода вам нужно всего лишь увеличить указатель.При сравнении, когда вы встречаете одно и то же число, просто сдвиньте все последовательные числа вперед на одно место.Например, если 0-й элемент равен 1 и вы снова нашли 1 по 4-му индексу, то сдвиньте элемент вперед по 5-му индексу на 4-й, 6-й до 5-й и так до последнего элемента.Таким образом, повторяющаяся запись в 4-м индексе теряется.Теперь уменьшите количество элементов в матрице на 1 и увеличьте соответствующую запись в массиве COUNT на 1. Продолжая до последнего элемента, мы получим матрицу с различными номерами.и соответствующая им частота в массиве COUNT .Эта реализация очень эффективна для языков, которые поддерживают указатели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...