Масштабирование признака на парковке

тема: Градиентный шаг · уровень: продвинутый

Условие

На парковке торгового центра для каждого временного интервала известны число въехавших автомобилей и число выехавших автомобилей. Эти сведения поступают двумя таблицами. Строки таблиц сопоставляются по идентификатору интервала.

Для строк, где число выехавших автомобилей указано, строится линейная модель ŷ = wq + b. В первой схеме признак q равен числу въездов x. Во второй схеме признак масштабируется: q = x / 100.

В обеих схемах начальные значения равны w = 0 и b = 0, выполняется ровно один шаг градиентного спуска с шагом η = 0.001 для функции потерь L = (1 / k) · Σ(ŵq + b - y)², где сумма берётся по k интервалам с известным числом выездов. Новые значения вычисляются по формулам w_new = w - η · (2 / k) · Σ(ŵq + b - y)q и b_new = b - η · (2 / k) · Σ(ŵq + b - y). Пропуск числа выездов обозначается символом -; такой интервал в суммах не участвует.

Требуется вывести, совпадают ли пары параметров после шага, а затем параметры первой и второй схемы. Если пары параметров равны точно до округления, выводится SAME, иначе выводится DIFFER. При равенстве параметров выводится слово SAME.

Формат ввода

В первой строке дано целое число n — число интервалов парковки.

В следующих n строках находится первая таблица: идентификатор интервала id и целое число въездов x.

В последних n строках находится вторая таблица: идентификатор интервала id и число выездов y, либо символ -, если число выездов отсутствует. Порядок строк во второй таблице может отличаться от порядка строк в первой.

Формат вывода

Выведите одну строку из пяти значений через пробел: слово SAME или DIFFER, затем w и b для первой схемы, затем w и b для второй схемы.

Каждое из четырёх чисел выведите с шестью знаками после десятичной точки. Числа округляются до ближайшего значения с шестью знаками после точки, а при ровно равных расстояниях выбирается значение с чётной последней цифрой.

Ограничения

1 ≤ n ≤ 4000.

Идентификатор id состоит из строчных латинских букв, цифр и символа _, его длина от 1 до 20.

Все идентификаторы в первой таблице различны. Все идентификаторы во второй таблице различны. Множества идентификаторов обеих таблиц совпадают.

0 ≤ x ≤ 1000.

Для указанного числа выездов выполняется 0 ≤ y ≤ 1000.

Хотя бы в одной строке второй таблицы число выездов указано, поэтому k ≥ 1.

Решить задачу с автопроверкой на Python →

Куда дальше