Найдите оптимальный обрезанный кругPython

Программы на Python
Ответить Пред. темаСлед. тема
Гость
 Найдите оптимальный обрезанный круг

Сообщение Гость »

Данная матрица целых чисел размером n на n, я хочу найти обрезанный круг, который максимизирует сумму. Вот изображение, а затем последует объяснение/код:
Изображение

Код: Выделить всё

      [[ 1,  1, -3,  0,  0,  3, -1,  3, -3,  2],
[-2, -1,  0,  1,  0, -2,  0,  0,  1, -3],
[ 2,  2, -3,  2, -2, -1,  2,  2, -2,  0],
[-2,  0, -3,  3,  0,  2, -1,  1,  3,  3],
[-1, -2, -1,  2,  3,  3, -3, -3,  2,  0],
[-3,  3,  2,  0, -3, -2, -1, -3,  0, -3],
[ 3,  2,  2, -1,  0, -3,  1,  1, -2,  2],
[-3,  1,  3,  3,  0, -3, -3,  2, -2,  1],
[ 0, -3,  0,  3,  2, -2,  3, -2,  3,  3],
[-1,  3, -3, -2,  0, -1, -2, -1, -1,  2]]
Центр круга находится в точке (0,0), и нас интересует только та часть, которая пересекает сетку. В каждой целочисленной координате в сетке находится целое число. Круг может иметь любой радиус (не обязательно целочисленный, но об этом ниже).
Существует также диагональная линия, которая может обрезать круг, как показано на рисунке. Диагональная линия всегда начинается и заканчивается в целочисленной координате на границе сетки и идет вниз и вправо под углом 45 градусов к горизонтали, как показано на рисунке.
Оценка за обрезанный круг — это сумма всех целых чисел, которые находятся как внутри круга (или на границе), так и на стороне диагональной линии, включая (0,0). Значения на границе (или рядом с ней): -3, 1, 3, -1, -3, 3, -1, 2, 0, 3.
Хотя круг может имеют любой радиус, нам нужно рассматривать только круги, которые точно пересекают точку сетки, чтобы существовало n ^ 2 различных соответствующих радиуса. Кроме того, нам нужно записать только одну позицию, где круг пересекается с диагональной линией, чтобы полностью указать обрезанный круг. Обратите внимание, что это пересечение с диагональю не обязательно должно происходить по целочисленной координате.
Если в оптимальном решении диагональ вообще не отсекает круг, то нам нужно только вернуть радиус. круга.
Если бы мы хотели найти только оптимальный круг, мы могли бы сделать это быстро и за время, пропорциональное входному размеру, с помощью:

Код: Выделить всё

import numpy as np
from math import sqrt
np.random.seed(40)

def find_max(A):
n = A.shape[0]
sum_dist = np.zeros(2 * n * n, dtype=np.int32)
for i in range(n):
for j in range(n):
dist = i**2 + j**2
sum_dist[dist] += A[i, j]
cusum = np.cumsum(sum_dist)
# returns optimal radius with its score
return sqrt(np.argmax(cusum)), np.max(cusum)
A = np.random.randint(-3, 4, (10, 10))
print(find_max(A))
Как быстро можно найти оптимальную обрезанную окружность?

Подробнее здесь: https://stackoverflow.com/questions/781 ... ped-circle
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как сделать исходный PictureBox и обрезанный PictureBox относительными?
    Гость » » в форуме C#
    0 Ответы
    77 Просмотры
    Последнее сообщение Гость
  • Python — обрезанный блок с результирующей моделью yolov8
    Anonymous » » в форуме Python
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous
  • JavaScript обрезанный и изменение размера изображения в поле ввода
    Anonymous » » в форуме Jquery
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • JavaScript обрезанный и изменение размера изображения в поле ввода
    Anonymous » » в форуме Javascript
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • Ведо: Найдите перекрестный круг двух сфер
    Anonymous » » в форуме Python
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»