Member 13398503 Ответов: 1

Хотите найти большие области с высоким отклонением


Мы хотим проверить эффективность нового процесса формования листового металла. После формовки мы измеряем отклонение от заданной толщины.

Исходные данные могут быть визуализированы в виде квадратной сетки измерений в диапазоне от 0 (правильная толщина) до 5 (высокое отклонение от правильной толщины).

Мы хотим найти большие области с большим отклонением от правильной толщины. Для этого мы рассчитываем балл для каждого местоположения в сетке. Оценка определяется путем добавления собственного отклонения местоположения,
для окружающих отклонения.

Например, в сетке:
4 | 2 | 3 | 2
0 | 1 | 2 | 2
1 | 3 | 0 | 2
2 | 0 | 1 | 5
Оценка для местоположения `(1,1)` выглядит следующим образом:

оценка(1,1) = 4 + 2 + 3 + 0 + 1 + 2 + 1 + 3 + 0 = 16

При работе с локациями по краям сетки оценка
следует игнорировать значения вне сетки. Например, оценка
расположение `(0, 0)` выглядит следующим образом:
4 | 2 | 3 | 2
0 | 1 | 2 | 2
1 | 3 | 0 | 2
2 | 0 | 1 | 5
оценка(0,0) = 4 + 2 + 0 + 1 = 7

Напишите функцию:
class Solution { public string solution (int T, int N, int[ ] V); }
это, учитывая целое число `T`, целое число `N` и нулевой индексированный массив `V`
состоящий из целых чисел `N*N`, возвращает список самых высоких баллов `T` и
свое местоположение.

Каждое место и оценка должны быть отформатированы:
(x, y, оценка)

Где `(x,y)`-вектор с нулевой индексацией в левом верхнем углу сетки.

Список должен быть возвращен в виде строки:
(x1, y1, score1) (x2, y2, score2) (x3, y3, score3)

Если есть несколько локаций с одинаковым счетом, отдавайте предпочтение локациям
в верхнем левом углу, например`(1, 0 ,20)(2, 0, 20)(1, 1 ,20)`

Входные сигналы запрашивающие измерение top1 в сетке:
4 | 2 | 3 | 2
0 | 1 | 2 | 2
1 | 3 | 0 | 2
2 | 0 | 1 | 5
Было бы:

T = 1
N = 4
V = [4, 2, 3, 2, 0, 1, 2, 2, 1, 3, 0, 2, 2, 0, 1, 5]

Что я уже пробовал:

Я не совсем понимал, что именно является результатом. Я не силен в статистике. Может ли кто - нибудь помочь мне найти решение? Спасибо

lw@zi

Вам нужно сделать это в C#?

1 Ответов

Рейтинг:
1

Rick York

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

Во-первых, напишите себе метод, который принимает входные данные и обрабатывает их в сетку значений. Вектор векторов - это один из вариантов хранения сетки.

Затем вам нужен метод, который вычисляет оценку с учетом сетки, ее размера и местоположения в сетке (x,y). Он может возвращать счет в виде целого числа. Вот тут все становится немного сложнее. Вам нужно сохранить результаты вместе с местоположением и, возможно, расстоянием от верхнего левого угла, чтобы вы могли легко сортировать результаты. Я бы, вероятно, использовал структуру с каждым из этих значений в качестве членов - оценка, x, y и расстояние. Вы можете сохранить структуры в векторе.

Затем отсортируйте вектор баллов, чтобы привести их в порядок. Вам нужно будет иметь вторичный критерий для сортировки, который представляет собой расстояние от верхнего левого угла для того, когда баллы совпадают, и третичное условие для того, когда баллы и расстояния совпадают. Например, координаты (1,2) и (2,1) находятся на одинаковом расстоянии от верхнего левого угла, так какой же из них идет первым? Третичный состоянии будет решить, что.

Наконец, учитывая отсортированный вектор баллов, запишите верхние T баллов в строку в указанном формате.

Я бы разделил проблему на эти четыре компонента и занимался ими по одному.