Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 13, 2008 01:27:54

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

Задачка на комбинаторику.

С чего ты взял? Завтра гляну в сырцы… если не забуду, конечно… но я сомневаюсь, что там не рекурсия.
Сейчас напрягу мозги и напишу итератор…



Офлайн

#2 Ноя. 13, 2008 01:34:02

shiza
От:
Зарегистрирован: 2007-07-03
Сообщения: 1073
Репутация: +  0  -
Профиль   Отправить e-mail  

Задачка на комбинаторику.

есть такая теория еще, что любой рекурсивный алгоритм, может быть заменен циклом.



Офлайн

#3 Ноя. 13, 2008 01:37:15

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

Задачка на комбинаторику.

Слышал, но я не настолько крут, чтобы доказывать это.



Офлайн

#4 Ноя. 13, 2008 02:25:33

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

Задачка на комбинаторику.

Мне было влом поновой ломать голову… Я ваш код только дооформил немного под свой стиль и забросилсебе в коллекцию “академических задачек” (вы (Dimka665 и Shiza), я надеюсь, не против?). Держи:

# -*- coding: utf-8 -*-

"""Написать код, который перебирает все комбинации перестановок.
Т.е., если на вход подается например ['a', 'b'], результатом должно быть [['a', 'b'], ['b','a']]
а если ['a', 'b', 'c'], то что-то вроде
[['a', 'b', 'c'], ['a', 'c', 'b'], ['b', 'a', 'c'], ['b', 'c', 'a'], ['c', 'a', 'b'], ['c', 'b', 'a']]
и т. д.

Кто решит задачку наиболее красиво и близко к Zen of Python, тот молодец
(c)Shiza"""

def permutations(l):
if len(l)==1:
return (l,)
else:
result = []
for i in xrange(len(l)):
for n in permutations(l[:i] + l[i+1:]):
result.append((l[i],) + tuple(n))
return result


def ipermutations(l):
if len(l)==1:
yield (l,)
else:
for i in xrange(len(l)):
for n in permutations(l[:i] + l[i+1:]):
yield (l[i],) + tuple(n)

if __name__ == "__main__":
print permutations([1, 2, 3])
print [i for i in ipermutations([1, 2, 3])]



Офлайн

#5 Ноя. 13, 2008 03:05:13

shiza
От:
Зарегистрирован: 2007-07-03
Сообщения: 1073
Репутация: +  0  -
Профиль   Отправить e-mail  

Задачка на комбинаторику.

хых. и правда! =)
здорово.



Офлайн

#6 Ноя. 13, 2008 04:34:01

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

Задачка на комбинаторику.

А тож!



Офлайн

#7 Ноя. 13, 2008 08:44:04

Dimka665
От:
Зарегистрирован: 2008-09-19
Сообщения: 177
Репутация: +  0  -
Профиль   Отправить e-mail  

Задачка на комбинаторику.

ZZZ
А тож!
это генератор, а не итератор)



Офлайн

#8 Ноя. 13, 2008 11:34:49

slivlen
От:
Зарегистрирован: 2006-07-06
Сообщения: 764
Репутация: +  0  -
Профиль   Отправить e-mail  

Задачка на комбинаторику.

shiza
но ведь в itertools это как-то сделали (хоть и на С)
Есть пример аналог на питоне.



Офлайн

#9 Ноя. 14, 2008 01:06:50

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

Задачка на комбинаторику.

Dimka665
это генератор, а не итератор)
А есть принципиальная разница в использовании? Вот и я не вижу.



Офлайн

#10 Ноя. 14, 2008 08:41:13

Dimka665
От:
Зарегистрирован: 2008-09-19
Сообщения: 177
Репутация: +  0  -
Профиль   Отправить e-mail  

Задачка на комбинаторику.

ZZZ
Dimka665
это генератор, а не итератор)
А есть принципиальная разница в использовании? Вот и я не вижу.
принципиальных нет)
итератор - класс, генератор - функция)
метод next итератора не сохраняет локальные переменные, точку возврата)))



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version