Ваш подход к запоминанию не будет работать, потому что, когда вы достигнете некоторого индекса i
, если вы уже вычислили какой-то результат для i
, ваш алгоритм не учитывает тот факт, что может быть лучше Результат можно получить, ограбив более оптимальный набор домов в левой части массива.
Решение этой дилеммы состоит в том, чтобы не пропускать бегущую value
(деньги, которые вы ограбили) вниз через рекурсивные звонки от родителей к детям. Идея состоит в том, чтобы вычислить результаты подзадачи без какого-либо ввода от узлов-предков, а затем построить более крупные решения из меньших по пути к стеку вызовов.
Затем будет работать запоминание индекса i
, поскольку данный индекс i
всегда будет иметь уникальный набор подзадач, решения которых не будут искажены при выборе из предков в левой части массива. Это сохраняет оптимальную подструктуру, необходимую для работы DP.
Кроме того, я рекомендую избегать глобальных переменных в пользу передачи ваших данных непосредственно в функцию.
def maximize_robberies(houses, memo, i=0):
if i in memo:
return memo[i]
elif i >= len(houses):
return 0
memo[i] = max(
houses[i] + maximize_robberies(houses, memo, i + 2),
maximize_robberies(houses, memo, i + 1)
)
return memo[i]
print(maximize_robberies([1, 2, 1, 1], {}))
Симметричные ключи, к которым Вы обращаетесь, являются Главными ключами Базы данных (DMKs). Они сохранены на уровне Базы данных, таким образом, резервное копирование/восстановление на другой SQL-сервер должно работать хорошо (с протестом отличающихся сервисных учетных записей, которые этот поток ссылается на),
Прежде чем Вы сделаете что угодно удостоверяется, что у Вас есть резервное копирование Ваших ключей (по-видимому, Вы уже сделали это):
USE myDB
GO
BACKUP MASTER KEY TO FILE = 'path_to_file'
ENCRYPTION BY PASSWORD = 'password'
GO
От этой статьи:
При создании Главного ключа Базы данных копия шифруется с предоставленным паролем и хранится в текущей базе данных. Копия также шифруется с Сервисным Главным ключом и хранится в основной базе данных. Копия DMK позволяет серверу автоматически дешифровать DMK, функцию, известную как "автоматическое управление ключами". Без автоматического управления ключами необходимо использовать оператор OPEN MASTER KEY и предоставить пароль каждый раз, когда Вы хотите зашифровать и/или дешифровать данные с помощью сертификатов и ключей, которые полагаются на DMK для безопасности. С автоматическим управлением ключами не требуются оператор OPEN MASTER KEY и пароль.