|
Обратные задачи и "тяжёлые" ассерты
|
|||
---|---|---|---|
#18+
В науке есть понятие прямых и обратных задач. Грубо говоря, зная структуру рассчитать спектр - это решение прямой задачи, а зная спектр расшифровать структуру - это решение обратной задачи (на самом деле в структурной химии используются скорее например рентгенограммы, а не спектры, но это частности). Можно взять серию уравнений: 1) y=ax+b 2) y=ax^2+bx+c 3) y=ax^3+bx^2+cx+d 4) y=ax^4+bx^3+cx^2+dx+e ... Зная x найти y - это решить прямую задачу, а зная y найти x - это решить обратную задачу. Есть общие признаки, позволяющие отличить прямую задачу от обратной: 1) Её можно решить в любом интервале x; 2) Для любого x решение единственно; 3) Решение относительно простое по сравнению с обратной задачей 4) Сложность (время) и надёжность решения прямой задачи практически не зависит от того, чему равен x или какое было начальное приближение. 5) Ещё одна связь между прямой и обратной задачей: существуют очень простые и универсальные методы решения обратной задачи через прямую, например простой перебор или градиентный спуск. Хотя они обычно далеко не эффективны в плане требуемых ресурсов. В программировании всё это, как я полагаю, вполне применимо. Например, работа нейронной сети - это решение прямой задачи, а обучение нейронной сети - это решение обратной. Я предлагаю рассматривать ассерт как решение прямой задачи, позволяющий проверить на каких-то этапах, как решается обратная. И если начать мыслить таким образом, быстро приходят в голову новые идеи, например идея тяжёлых ассертов. Предположим, у нас есть массив из N элементов, каждый i-й элемент это два массива из Mi элементов; в первом массиве расположены номера индексов во втором, а во втором наоборот в первом. Т.е. массивы Mi могут быть, например, 231 и 312, или 12 и 21. В массивы периодически вносятся изменения, и нужно проверять ассертами их самосогласованность. Так вот простой ассерт - это проверить i-й элемент большого массива, а тяжёлый ассерт - проверить сразу весь большой массив со всеми вложенными подмассивами. Тяжёлый ассерт съедает много ресурсов, и его нужно включать только на время. Пример становится более понятным, если большой массив имеет иерархичную структуру, с рекурсией. Тогда тяжёлый ассерт один, а простых ассертов много. Очевидно что код будет проще, если везде вставлять тяжёлый ассерт, хотя такой код работать будет медленно. ... |
|||
Модератор:
Нравится:
Не нравится:
|
|||
05.12.2019, 19:43 |
|
Обратные задачи и "тяжёлые" ассерты
|
|||
---|---|---|---|
#18+
прямая задача 2+2 = ? обратная 4 = ? + ? ... |
|||
Модератор:
Нравится:
Не нравится:
|
|||
06.12.2019, 11:03 |
|
Обратные задачи и "тяжёлые" ассерты
#1758105
![]() Ссылка:
Ссылка на сообщение:
Ссылка с названием темы:
Ссылка на профиль пользователя:
Ссылка на вложение:
|
||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
#18+
Автор задачи, опубликованной в журнале "Шахматы в СССР", в 1976 году, Никита Михайлович Плаксин, спрашивает Вас: На доске мат? ... |
||||||||||||||||
Модератор:
Нравится:
Не нравится:
|
||||||||||||||||
09.12.2019, 17:45 |
|
|
start [/forum/topic.php?fid=13&fpage=8&tid=40281]: |
0ms |
get settings: |
11ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
22ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
2ms |
others: | 18ms |
total: | 130ms |
0 / 0 |