Re: Оптимизационная задача в комбинаторике
От: Sinclair Россия https://github.com/evilguest/
Дата: 10.06.24 11:13
Оценка:
Здравствуйте, Khimik, Вы писали:

K>Продолжение этой темы
Автор: Khimik
Дата: 09.06 17:02
. Есть брутто-формула молекулы, например C6H6. Нужно перебрать все осколки, и далее для каждого осколка перебрать все возможные связи в нём, чтобы проверить – можно ли расставить связи так, чтобы валентность водорода была всегда 1, а валентность углерода от 1 до 4.

K>Т.е. c C6H6 можно сгенерировать осколок CH4 или H2, но нельзя CH5 или H3.
Непонятно. Я не химик, но вроде бы если мы собрали из двух H один H2, то он уже самостоятельная молекула и прицепить его ни к чему не удастся.
А если мы собрали из одного C и одного H кусочек СH, то из него "торчит" 3 связи C, и можно доприцепить к нему ещё что-то.
Поэтому напрашивается простой алгоритм:
1. Вынимаем из "коробки" атом, и для каждой из его связей
1.1. смотрим — можно ли из оставшихся в коробке что-то к нему прицепить
1.1.1. если да — то прицепляем это что-то, и рекурсивно обращаемся к п.1 — то есть пытаемся к каждой из оставшихся связей что-то прицепить
1.1.2. Если в коробке не осталось атомов, то у нас получилась не молекула, а свободный радикал.
1.1.3. Если у нас кончились связи, а в коробке остались ещё атомы, то мы задачу не решили. Так что нужно вернуть последний прицепленный кусочек в коробку и выйти из рекурсии для перебора следующей попытки.

Начинаем разгребать HHHHHHCCCCCC:
1. достали H
2. .достали второй H
3. ..получилось H2, но атомов ещё полно — кладём H обратно в коробку и берём следующий
4. .Берём C (очевидно, что пробовать остальные четыре H не имеет смысла, т.к. они дадут тот же результат), получаем CH. У него три "свободных" связи.
5. ..Берём из коробки H, получаем CH2. У него 2 связи
6. ...Берём из коробки H, получаем CH3. У него 1 связь
7. ....Берём из коробки H, получаем CH4. У него нет свободных связей, но атомов ещё полно — кладём H обратно в коробку
8. ....Берём из коробки C, получаем C2H3. У него 3 cвязи.
9. .....Берём из коробки H, получаем C2H4. У него 2 связи.
10. .....Берём из коробки H, получаем C2H5. У него 1 связь.
11. ...... Берём из коробки H, получаем C2H6. У него нет свободных связей, но атомов ещё полно — кладём H обратно в коробку.
12. ...... Берём из коробки С, получаем C3H5. У него 3
.....
Берём из коробки H, получаем C6H6, свободных связей нет, атомов в коробке нет. Задача решена.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.