py.user.nextА если память не важна, а важнее скорость?
Да со списками/кортежами всё точно так же делается - через индексы. Это оптимальное решение (по памяти).
py.user.nextА если память не важна, а важнее скорость?
Да со списками/кортежами всё точно так же делается - через индексы. Это оптимальное решение (по памяти).
KixiroНе, нужно одним процессом.
Можно попытаться расспаралелить обход по for на несколько процессов, чтобы ускорить выполнение задачи.
KixiroВот и ищу такой способ.
Или искать подходящий алгоритм, где поиск осуществляется по коэффициентам или различным преобразованиям, а не в лоб.
matrix =[[1,2,3,4,5], [5,6,7,8,9], [9,0,0,0,2], [6,5,4,3,2], [3,4,2,3,2]] pattern = [[5,4,3], [4,2,3]] def finder(matrix, pattern): width = len(matrix[0]) height = len(matrix) p_width = len(pattern[0]) p_height = len(pattern) def comparer(r, c): if c + p_width > width: return if r + p_height > height: return for i, row in enumerate(pattern): for j, e in enumerate(row): matrix_i = i + r matrix_j = j + c if matrix[matrix_i][matrix_j] != e: return return True corner = pattern[0][0] def cmp(): for row, sub in enumerate(matrix): for column, elem in enumerate(sub): if corner == elem: if comparer(row, column): return row, column return cmp() print finder(matrix, pattern)
FishHookЭто, как я понял, Вы реализовали то, что посоветовал py.user.next
jor77Ну да, типа того. Только там проверку длин и высот нужно делать не на каждом сравнении, а перед циклами один раз урезать, чтобы оно дальше не ходило.
Это, как я понял, Вы реализовали то, что посоветовал py.user.next
jor77На создание в памяти копий элементов уходит время.
Неужели срезы так затормаживают процесс?