Как составить матрицу корреспонденции?

  • Автор темы alex2008
  • Дата начала
Статус
Закрыто для дальнейших ответов.
A

alex2008

Гость
#1
В городе N проводилось исследование. На 130 пунктов города были расставлено по несколько человек, которые записывали номера машин, проезжающих мимо них – в обоих направлениях (то есть, несколько человек стояли с одной стороны дороги и с другой).

После этого получилось огромнейшее количество данных, но с ошибками. Например, не была понятная цифра или буква номера («331С?» или «267А?»). То есть номера записывались в виде «три цифры и две буквы».

Все эти данные нужно обработать и составить матрицу корреспонденции. Она должна получиться размерности 130x130, а значения в матрице отображали бы количество машин. То есть если бы число стояло на пересечении 1 (по строке) и 2 (по столбцу), то оно означало бы количество машин, проехавших из пункта 1 в пункт 2.

Кто-нибудь знает, как решить подобную задачу? И как поступить с ошибками?
 
Y

Yason

Гость
#2
Прямолинейно:
0. Матрица корреспонденции должна быть трёхмерной, третье измерение -- номера проехавших машин.
1. Исходные данные: список "номер машины + номер пункта + направление (в, из)"
2. Извлекаем первый элемент списка, машина "123AB" выехала из пункта N. Номера с ошибками пропускаем.
3. Ищем по списку, в какие пункты k1,...kM эта машина въезжала, найденных удаляем из списка.
4. В столбцы k1,..kM строки N добавляем номер "123AB"
5. Повторяем с 1, пока не закончатся номера без ошибок.

К этому моменту матрица содержит все корректно распознанные номера, количество номеров, привязанное к каждой паре "строка-столбец" матрицы и есть искомое количество машин (почти).

Теперь об ошибках.
1. Для каждой машины из списка, выехавшей(вьехавшей) из(в) пункта X; пока список не иссякнет.
2. Просматриваем строку(столбец) X вышесозданной матрицы, находим наиболее похожий правильный номер.
3. Заменяем плохораспознанный номер похожим правильным, добавляем его в соответствующие столбцы(строки)

Примитивная функция оценки подобия строк s1, s2 одинаковой длины length:
Код:
int sim = 0; //коэффициент подобия
for (int i=0; i<length, i++)
(s1[i]==s2[i]) ? sim++ : sim--;
return sim; //чем больше, тем более подобны строки
 
Статус
Закрыто для дальнейших ответов.