Re[3]: POC
От: Denis Ivlev  
Дата: 16.12.20 08:18
Оценка: +1
Здравствуйте, Denis Ivlev, Вы писали:

DI>Все. Вот теперь разрабатывать закончил. Заняло это аж минуты 3


Продолжаю отрабатывать 600К

Теперь не только плгоритм, но и пруф оф концепт:

  Код
import random
import time

repeats = 10

users = 1000

width = 2500
height = 2500

view_width = 200
view_height = 100

data = [[0 for x in range(width)] for y in range(height)]

views = None

def rand_point():
    return random.randrange(width) - 1, random.randrange(height) - 1

def rand_view():
    x, y = rand_point()
    return x, y, min(x + view_width, width), min(y + view_height, height)

def match(x, y, x1, y1, x2, y2):
    return x1 <= x and x <= x2 and y1 <= y and y <= y2

def modify(x, y):
    data[x][y] = data[x][y] + 1

notifications = 0

views = [rand_view() for x in range(users)]

def notify(x, y):
    global notifications
    for v in views:
        if match(x, y, *v):
            notifications = notifications + 1

start = time.time()

for i in range(repeats):
    for j in range(users):
        x, y = rand_point()
        modify(x, y)
        notify(x, y)

end = time.time()

print('modifications: ', users * repeats)
print('notifications: ', notifications)
print('spend time:', end - start)
print('modifications per sec: ', users * repeats / (end - start))


Вообще неоптимизированный тормозной питон на табличке 2500х2500 при 1000 пользователях выдает ~3950 сериализованных изменений в таблице. Интрига — что-же будет если написать это на плюсах, да еще и несвязанные регионы обрабатывать параллельно?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.