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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.04.2013, 18:06   #1
Тамерлан Абилов
Пользователь
 
Регистрация: 03.03.2013
Сообщений: 70
По умолчанию комбинаторика.анаграмма

примерно вот дела в чем если число перестановок с различными элементами n! а сколько же тогда например если из 5и элемента 2ое повторяющиеся?например: доска.будет 120 перестановок если не ошибаюсь все верно или не так?а что если носок. 2 буквы "о" все портят повторными перестановками.
а хочу написать прогу где выводятся все перестановки одного слова.а вот когда например 2 элемента повторяются что мне делать до скольки дать цикл?я к тому что если известно сколько пермутаций у нас будет легче дать и столько цикла вроде.это все комбинаторика верно?есть какая нибудь литература где все досконально объясняется примерами плохо понимающего на русском ?просто сам по русски не ахти)
Тамерлан Абилов вне форума Ответить с цитированием
Старый 25.04.2013, 21:08   #2
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
сколько же тогда например если из 5и элемента 2ое повторяющиеся?
Ага. 120. тыц

Цитата:
а что если носок. 2 буквы "о" все портят повторными перестановками.
Общая формула : У Вас есть N символов. K из них одинаковы. Тогда кол-во перестановок будет равно N! / K!
Так же можете посмотреть эту темку : тыц
Литература? Хм.. Это не ко мне
Poma][a вне форума Ответить с цитированием
Старый 25.04.2013, 23:16   #3
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Тамерлан Абилов,
Цитата:
Я хочу написать прогу, где выводятся все перестановки одного слова.
Вариант первый, лобовой: перебирать все перестановки и записывать их в структуру данных, обнаруживающую дублирование при вставке (хэш-таблица, самобалансирующееся дерево). Непригоден для достаточно длинных слов с большим числом различных букв.

Вариант второй, творческий: видоизменить Ваш алгоритм перебора перестановок так, чтобы пропускать все дубликаты и только их. Конкретное действие зависит от применяемого алгоритма.
Цитата:
Это всё комбинаторика, верно? Есть какая-нибудь литература, где всё досконально объясняется примерами для плохо понимающего на русском?
Это комбинаторика, всё верно. К сожалению, мне неизвестно хорошей книги по собственно "комбинаторике". Большинство книг уделяют подобным вопросам в лучшем случае главу-другую, и рассмотрение нельзя назвать подробным.
С. Скиена, "Алгоритмы", глава 7: "Комбинаторный поиск и эвристические методы";
Д. Кнут, "Искусство программирования", том 1, глава 2, раздел 5: "Перестановки и факториалы".
Д. Кнут, "Искусство программирования", том 3, глава 5, раздел 1: "Комбинаторные свойства перестановок";
Также со стороны математики комбинаторика иногда рассматривается как вводная часть теории вероятностей, поэтому может иметь смысл полистать разные учебники по теории вероятностей - возможно, где-то ей уделено больше внимания, чем в книгах, оказавшихся у меня под рукой. Можете поискать по ссылкам внизу страницы в Вики.
Abstraction вне форума Ответить с цитированием
Старый 26.04.2013, 13:21   #4
Тамерлан Абилов
Пользователь
 
Регистрация: 03.03.2013
Сообщений: 70
По умолчанию

Abstraction, да и другого алгоритма не нахожу кроме первого варианта сколько не думай.но вот извините можно по подробнее о втором?
Цитата:
Вариант второй, творческий: видоизменить Ваш алгоритм перебора перестановок так, чтобы пропускать все дубликаты и только их. Конкретное действие зависит от применяемого алгоритма.
то есть?не записывая не в какую структуру пропускать все дубликаты?а что имеете в виду говоря видоизменить алгоритм?
Тамерлан Абилов вне форума Ответить с цитированием
Старый 26.04.2013, 13:38   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

загляните в тему Перестановки

в пост #13
приведён код (с) TinMan

позволю себе продублировать его полностью здесь:
Код:
{ (c) TinMan }

procedure Permute(t,s: string);
var
  i: integer;
begin
  if s='' then
    writeln(t)
  else
    for i:=1 to Length(s) do
      if Pos(s[i],s)=i then
        Permute(t+s[i],Copy(s,1,i-1)+Copy(s,i+1,Length(s)-i))
end;

begin
  Permute('','носок')
end.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 26.04.2013, 21:50   #6
Тамерлан Абилов
Пользователь
 
Регистрация: 03.03.2013
Сообщений: 70
По умолчанию

Serge_Bliznykov, пожалуй я тоже продублирую этот пост
извините меня за прямоту, но это же ГЕНИАЛЬНО!в точ точ я бы тоже так выразился))буду весь день ломать голову на этом коде спс большое
Тамерлан Абилов вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Анаграмма daniil123 Паскаль, Turbo Pascal, PascalABC.NET 5 15.11.2011 10:06
Комбинаторика Dima170792 Помощь студентам 8 20.04.2011 00:01
анаграмма Витас Помощь студентам 1 02.11.2010 18:50
[С++] Анаграмма Nikita_M Помощь студентам 1 25.10.2010 21:46
Анаграмма Djeka(c) Помощь студентам 1 16.09.2010 22:15