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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.10.2011, 23:47   #1
dixonich
Пользователь
 
Регистрация: 11.10.2009
Сообщений: 79
По умолчанию Полный перебор

Суть такова : есть текст (например, a b c), где a b c - это слова.
Нужно как-то организовать полный перебор фраз, т.е.
ab ac, ba, bc, ca, cb, bc, abc, cba, bca и тд
Как это можно осуществить? С помощью чего?
Без ООП.
Накидайте, плз, какой-нибудь псевдокод) а то никак не могу сообразить)
dixonich вне форума Ответить с цитированием
Старый 25.10.2011, 00:23   #2
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Код:
#!/usr/bin/python
# -*- coding: cp1251 -*-

a = ['a', 'b', 'c']

def Pnm( a, j, k ):
    if j <= k:
        for i in range(0,len(a) ):
            z[j-1] = a[i]
            _a = []
            for l in range(0,len(a) ):
                if l != i:
                    _a.append( a[l] )
            Pnm( _a, j+1, k )
    else:
        print z
        return


nA = len( a )
for k in range (1, nA+1):
    z = range( k )
    Pnm( a, 1, k )

#
111024.jpg
Vago вне форума Ответить с цитированием
Старый 25.10.2011, 01:32   #3
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию Генератор: заготовка

Цитата:
Сообщение от dixonich Посмотреть сообщение
Суть такова : есть текст (например, a b c), где a b c - это слова.
Нужно как-то организовать полный перебор фраз...
Если фразы русские, то, может, как-то поможет мой генератор (приложен).

Для примера взял 5 элеметов; это 5!=120 комбинаций (что и отражено на рисунке).

Вам останется (для Word — по Ctrl-h) заменить каждую букву на какое-то русское слово, добавляя в конце пробел, — и набор фраз из 5 слов готов.
Изображения
Тип файла: png 5!комбинаций.png (26.6 Кб, 141 просмотров)
Вложения
Тип файла: doc Generator0.doc (43.5 Кб, 15 просмотров)

Последний раз редактировалось Sasha_Smirnov; 25.10.2011 в 04:11. Причина: новый генератор перестановок.
Sasha_Smirnov вне форума Ответить с цитированием
Старый 25.10.2011, 23:38   #4
dixonich
Пользователь
 
Регистрация: 11.10.2009
Сообщений: 79
По умолчанию

Цитата:
Сообщение от Vago Посмотреть сообщение
Код:
#!/usr/bin/python
# -*- coding: cp1251 -*-

a = ['a', 'b', 'c']

def Pnm( a, j, k ):
    if j <= k:
        for i in range(0,len(a) ):
            z[j-1] = a[i]
            _a = []
            for l in range(0,len(a) ):
                if l != i:
                    _a.append( a[l] )
            Pnm( _a, j+1, k )
    else:
        print z
        return


nA = len( a )
for k in range (1, nA+1):
    z = range( k )
    Pnm( a, 1, k )

#
Вложение 43661
спасибо, конечно, но range, как я понимаю, список, а такой возможности в языке (perl) , на котором надо реализовать мне, нет.
нет ли других вариантов?)
dixonich вне форума Ответить с цитированием
Старый 26.10.2011, 00:20   #5
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Цикл while в Перле есть, надеюсь?..
Код:
#!/usr/bin/python
# -*- coding: cp1251 -*-

a = ['a', 'b', 'c']


def Pnm( a, j, m ):
    if j <= m:
#       for i in range(0,len(a) ):
        i = 0
        while i <= len(a)-1:
            z[j-1] = a[i]
            _a = []
#           for l in range(0,len(a) ):
            k = 0
            while k <= len(a)-1:
                if k != i:
                    _a.append( a[k] )
                k = k+1
            Pnm( _a, j+1, m )
            i = i+1
    else:
        print z
        return


# for m in range (1, len(a)+1):
m = 1
while m <= len(a):
#   z = range( m )
    z = []
    i = 0
    while i < m:
        z.append( i )
        i = i+1
    Pnm( a, 1, m )
    m = m+1

#
(l сливается с единицей - поменял некоторые индексы по сравнению с исходным вариантом).
Vago вне форума Ответить с цитированием
Старый 26.10.2011, 01:40   #6
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию 1, 2, 3, 4 или 5 из M

Цитата:
Сообщение от dixonich Посмотреть сообщение
Накидайте, плз, какой-нибудь псевдокод☺
Вот как-то так, наверное, можно и на Перле. Перечислять, кстати, необязательно цифры — можно индексы некоего массива (того словаря, из которого вы составляете набор фраз).
Код:
Sub Generation5(): Dim L1, L2, L3, L4, L5, N, k, i
Const D = 3 'количество элементов в одной комбинации (в одном размещении) или, скажем, слов в 1 фразе
MsgBox "Печатаю все " & D & "-значные десятичные числа из разных цифр." & vbCr & vbCr & _
"Принудительный выход: Ctrl + Break."
    
    For L1 = 0 To 9
        For L2 = 0 To 9:                If L2 = L1 Then GoTo 2
            For L3 = 0 To 9:            If L3 = L1 Or L3 = L2 Then GoTo 3
'                For L4 = 0 To 9:        If L4 = L1 Or L4 = L2 Or L4 = L3 Then GoTo 4
'                    For L5 = 0 To 9:    If L5 = L1 Or L5 = L2 Or L5 = L3 Or L5 = L4 Then GoTo 5
                    Selection.TypeText vbTab & L1 & L2 & L3 & L4 & L5
'5:                  Next
'4:              Next
3:          Next
2:      Next
1:  Next

N = 1: For i = 1 To 10: N = N * i: Next     'вычисление 10!
k = 1: For i = 1 To 10 - D: k = k * i: Next 'вычисление (10 – D)!

MsgBox "Число перестановок: " & N / k
End Sub
Для испытания собственно алгоритма приложил документ с программой.

Там 3 из 10 (если не снять комменты). Плюс некий интерфейс.
Вложения
Тип файла: doc Generator1.doc (48.5 Кб, 16 просмотров)

Последний раз редактировалось Sasha_Smirnov; 26.10.2011 в 17:44. Причина: убрал вопрос.
Sasha_Smirnov вне форума Ответить с цитированием
Старый 26.10.2011, 13:49   #7
dixonich
Пользователь
 
Регистрация: 11.10.2009
Сообщений: 79
По умолчанию

спасибо вам.
а что такое append? не понятно)
z = [] - это инициализация пустого массива?
dixonich вне форума Ответить с цитированием
Старый 26.10.2011, 14:26   #8
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Цитата:
Сообщение от dixonich Посмотреть сообщение
а что такое append? не понятно)
http://www.google.com/search?&rls=en...ppend+function

Цитата:
Сообщение от dixonich
z = [] - это инициализация пустого массива?
Списка.
Vago вне форума Ответить с цитированием
Старый 26.10.2011, 14:40   #9
dixonich
Пользователь
 
Регистрация: 11.10.2009
Сообщений: 79
По умолчанию

в перле нет списочков(
нельзя это как-то реализовать на массивах лишь?
dixonich вне форума Ответить с цитированием
Старый 26.10.2011, 16:07   #10
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Цитата:
Сообщение от dixonich Посмотреть сообщение
нельзя это как-то реализовать на массивах лишь?
Конечно, можно.
Vago вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
полный бред Денис999 Помощь студентам 5 18.12.2010 18:47
Брутфорс (полный перебор) Tronix Паскаль, Turbo Pascal, PascalABC.NET 8 12.09.2010 22:44
Полный перебор выражения Alex_sim Общие вопросы .NET 9 24.05.2010 09:50
Полный перебор или есть другие варианты? androidvsu Помощь студентам 8 12.03.2009 14:07