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

Тема в разделе "Свободное общение", создана пользователем alex2008, 19 апр 2008.

Статус темы:
Закрыта.
  1. alex2008

    alex2008 Гость

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

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

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

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

    Yason Гость

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

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

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

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

Поделиться этой страницей