![]() |
|
![]() ![]() ![]() |
|
namelessTee |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 13.3.2012 Репутация: нет Всего: нет |
Возможно есть какие нибудь алгоритмы, для восстановления двусвязного списка, в ситуации если у одно из не концевых элементов связь была установлена таким образом, что список стал замкнутым (проще говоря образовался деадлок, который превращает обход списка в бесконечный цикл). Задетектить проблему довольно легко - достаточно проверить, что один и тот же элемент появился в цепочке 2 раза, а вот есть ли алгоритм позволяющий восстановить последовательность исходя например из того, что все остальные элементы корректно изменили все свои связи?
Под корректностью изменения связей понимается, что элемент который должен был идти после элемента вызывающего деадлок, считает элемент вызвавший деадлок предыдущим, и содержит корректную ссылку на следующий элемент. И это все при условии: элементы хранятся в одном месте и могут принадлежать разным спискам(идентификатора родительского списка они не содержат); один и тот же элемент может принадлежать только одному списку; первый элемент списка корректен и не вызывает деадлок; Интересует не обязательно алгоритм гарантирующий 100% восстановление цепочки, главное что бы было гарантированно - что не будут повреждены остальные списки. |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 7 Всего: 386 |
Нужно у списка хранить кроме головы еще и хвост. Если пробегаясь с головы в хвост получаем deadlock, то нужно пробежаться с хвоста в голову и перерисовать ссылки.
-------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
namelessTee |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 13.3.2012 Репутация: нет Всего: нет |
Ага, спасибо, почти к тому же и пришли уже, с той лишь только разницей, что приходится не хранить хвост, а пробегаться по всем элементам и искать путь обратно в список(точнее к деадлоку) . Хвост нельзя хранить по техническим причинам :( .
Это сообщение отредактировал(а) namelessTee - 23.4.2012, 17:21 |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 7 Всего: 386 |
Мнээ.... А ломается именно это список? По которому нужно добежать до дидлока? Как можно по кривому списку восстановить всю цепочку? Можно только выкинуть элементы за циклической ссылкой и сказать, что так и былО. -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Алгоритмы" | |
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Алгоритмы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |