Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Работа для программиста > Фриланс
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.11.2010, 15:12   #11
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

присоединяюсь. интересно как решилось.
попробовал "поиск решений" получил дырку от бублика. из алгоритмов в голове перебор вариантов в лоб. количество только круто растет. массив из N элементов это N! вариантов. для 4 это 24, а для 10 это уже 3.6 млн. штук.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете

Последний раз редактировалось IgorGO; 19.11.2010 в 15:36.
IgorGO вне форума Ответить с цитированием
Старый 19.11.2010, 15:13   #12
Tronix
Форумчанин
 
Аватар для Tronix
 
Регистрация: 15.06.2010
Сообщений: 740
По умолчанию

Нашел кросс-пост от автора здесь: http://www.cyberforum.ru/algorithms/thread193287.html
Там же предлагают вариант на Си (эээ ++ наверно). Пока не пробовал (компилить не чем) и не знаю, работает ли. В любом случае буду следить за этой и той темой. Посмотрим что автор скажет.

UPD: Скомпилил тот пример на C++, работает на малых примерах вроде нормально. Хмм, будем разбираться...
Чтобы понять рекурсию, сперва нужно понять рекурсию.

Последний раз редактировалось Tronix; 19.11.2010 в 15:25.
Tronix вне форума Ответить с цитированием
Старый 19.11.2010, 20:33   #13
кот Бегемот
Новичок
Джуниор
 
Регистрация: 15.11.2010
Сообщений: 1
По умолчанию

Всё оказалось очень гениально просто. Не нужен ни перебор, ни рекурсия, ни функции, ни процедуры.
Изящное решение предложил Сергей (ms@samaralan.ru)
За что ему мой респект и уважуха.
кот Бегемот вне форума Ответить с цитированием
Старый 20.11.2010, 00:10   #14
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

>>Изящное решение предложил Сергей (ms@samaralan.ru)
так что за решение? секрет, ноу-хау? Или поделитесь?...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 20.11.2010, 05:57   #15
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

сделал я тупой перебор... получил решение для массива из 4-х чисел, которые выложил кот Бегемот.
взял для пробы массив из 8 чисел и... не получил исходного массива. присмотрелся а решение-то найдено правльное. переделал функцию и оказалось, один и тот же конечный массив можно получить на основе разных исходных массивов.

итак вот такой конечный массив А(А(i))
2 3 8 7 4 5 6 1
а вот, оказывается, с каких исходных массивов он может быть получен A(i):
4 7 6 2 1 8 3 5
5 4 7 3 2 1 8 6
6 5 4 8 3 2 1 7
7 6 5 1 8 3 2 4
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 20.11.2010, 09:39   #16
кот Бегемот
Новичок
Джуниор
 
Регистрация: 15.11.2010
Сообщений: 1
По умолчанию

Нет, никакого секрета нет, просто в реальности задача была сложнее, чем заявлена в теме, и решение сделано для более сложной задачи. А задача, описанная здесь, решена внутри этой, более сложной задачи.

Итак, общая задача:
Массив А состоит из неповторяющихся чисел от 1 до N
Массив B сформирован из массива А по закону: B[A[A[i]]]=i
По данному массиву В найти массив А

for i := 0 to n - 1 do begin
k := Src[i];
k := Src[Pred(k)];
Dst[Pred(k)] := Succ(i);
end;
кот Бегемот вне форума Ответить с цитированием
Старый 20.11.2010, 11:44   #17
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

кот Бегемот,
удалось ли по массиву B(i) = A(A(i)) = 2 3 8 7 4 5 6 1
получить 4-е возможных варианта масиива А?
4 7 6 2 1 8 3 5
5 4 7 3 2 1 8 6
6 5 4 8 3 2 1 7
7 6 5 1 8 3 2 4

ясен-красен, что я тоже решал общую задачу для массива из N элементов. Выглядит это так:

Dim C As Long, F As Long, i() As Long, r()

Function FindInitArray(rg As Range)
Dim a As Long
C = rg.Cells.Count
ReDim r(1 To C)
ReDim i(1 To 10, 1 To C)
F = 1
a = 1
For Each cl In rg.Cells
r(a) = cl.Value
a = a + 1
Next
NextV (1)
For a = 1 To C
If i(1, i(1, a)) <> r(a) Then FindInitArray = "Nothing": Exit Function
Next
FindInitArray = i
End Function

в данном коде не приведена только рекурсивная процедура NextV, которая собственно и перебирает варианты и складывает их в i(a,b). сначала я перебирал варианты в одномерном массиве i(a), останавливая NextV на первом удачном, а когда понял, что решений может быть не одно - стал собирать варианты в i(a,b).
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете

Последний раз редактировалось IgorGO; 20.11.2010 в 11:51.
IgorGO вне форума Ответить с цитированием
Старый 20.11.2010, 13:03   #18
кот Бегемот
Новичок
Джуниор
 
Регистрация: 15.11.2010
Сообщений: 1
По умолчанию

Что вы все читать что ли не умеете? В задании (повторяю в третий раз) необходимо найти любой вариант, а вовсе не все возможные.
кот Бегемот вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Анализ исходного кода heart Безопасность, Шифрование 7 31.12.2009 08:26
Восстановление исходного кода из .exe файла. Mutagena Помощь студентам 3 06.12.2009 15:43
из четных чисел исходного массива сформировать новый массив sanya006 Помощь студентам 3 11.11.2009 19:14
Поменять местами правую и левую часть исходного массива антон2 Паскаль, Turbo Pascal, PascalABC.NET 4 07.04.2009 17:36
Два одномерных массива,представляющие собой средние значения строк и столбцов исходного. Делфи 3 <DimonM@n> Помощь студентам 2 23.11.2008 21:51