Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> полный перебор по алфавиту, помогите в алгоритмом 
V
    Опции темы
СерегаГоляков
Дата 15.4.2011, 06:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Всё супер :)
*


Профиль
Группа: Участник
Сообщений: 142
Регистрация: 26.4.2010
Где: НСК

Репутация: нет
Всего: нет



Помогите с алгоритмом генератора слов из алфавита.
Есть алфавит: абвгдеж
Генерим слово длиной 4.
А программа последовательно выдаёт:
аааа
аааб
ааав
аааг
...
...
жжжж

Глупость, но ваще как не пробую не могу сообразить((  smile 

Это сообщение отредактировал(а) СерегаГоляков - 15.4.2011, 06:59
--------------------
Список всех полезных программ в ОДНОЙ программеhttps://sites.google.com/site/coolprogramms...latnyh-programm...Пьяные белазисты в карьереhttp://www.youtube.com/watch?v=6FGNGMwxJZ4
PM WWW   Вверх
Экскалупатор
Дата 15.4.2011, 09:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 11
Всего: 24



СерегаГоляков, может покажешь код? или как предлагаешь догадаться как именно "Генерим слово длиной 4". random знаешь? используешь? как используешь?
PM MAIL ICQ   Вверх
bend0r
Дата 15.4.2011, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 14.9.2005

Репутация: 1
Всего: 2



самое простое и что первое приходит в голову это 4 цикла по алфавиту ну то есть
Код

for(q=0;arrAlf.count;q++)
{
   for(w=0;arrAlf.count;w++)
  {
      for(e=0;arrAlf.count;e++)
     {
           for(r=0;arrAlf.count;r++)
         {
               slovo=arrAlf[q]+arrAlf[w]+arrAlf[e]+arrAlf[r]
               arrSlovo.add(slovo)
         }
     }
  }
}


конечно если слово состоит больше чем из 4 символов надо рекурсию
PM MAIL   Вверх
Экскалупатор
Дата 15.4.2011, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 11
Всего: 24



СерегаГоляков, что то я прочитал твой пост как то не так, мне показалось что нужно что бы было не по порядку...
PM MAIL ICQ   Вверх
jonie
Дата 15.4.2011, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 22
Всего: 118



я тут дааавно писал переборщик (идея такого перебора не моя) http://e-jonie.narod.ru/src/passgen/passgen.rar
мб поможет.


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Yagmort
Дата 15.4.2011, 22:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 339
Регистрация: 17.6.2009

Репутация: нет
Всего: -1



Цитата(СерегаГоляков @ 15.4.2011,  06:59)
Помогите с алгоритмом генератора слов из алфавита.
Есть алфавит: абвгдеж
Генерим слово длиной 4.
А программа последовательно выдаёт:
аааа
аааб
ааав
аааг
...
...
жжжж

Глупость, но ваще как не пробую не могу сообразить((  smile

Напиши точнее вопрос. Что хочешь получить, и каким путем будут формироваться данные слова, я например не понял, то ли rnd, то ли просто тупо все буквы повторить по 33 раза... :?
PM MAIL   Вверх
-Mikle-
Дата 19.4.2011, 09:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 17
Всего: 59



Все очень просто. Представь себе, что твой алфавит - это придуманная тобой система счисления. Тогда решение сводится к тому, чтобы перевести число в эту систему счисления.

Код


// нужный алфавит
const string literals = "абвгдеёжз"; // любая последовательность символов, неважно

static string ConvertFrom(int num)
{
    // размер буфера можно вычислить по логарифму
    // длина literals - это основание твоей системы счисления
    char[] buffer = new char[num == 0 ? 1 : (int)(Math.Truncate(Math.Log(num, literals.Length)) + 1)];

    // далее, обычный способ преобразования, комментировать не нужно я думаю
    int i = buffer.Length - 1;
    do
    {
        buffer[i--] = literals[num % literals.Length];
        num /= literals.Length;
    }
    while (num > 0);

    return new string(buffer);
}


Вот и все. Этот код вернет "а" для параметра 0, "б" для 2, "бз" для параметра 17.

Дополнив код вот таким методом:

Код

static IEnumerable<string> Generate(int length)
{
    // вычисляем максимальное число
    int max = (int)Math.Pow(literals.Length, length);

    // и возвращаем строку выровнив ее по правому краю с использованием 
    // самого первого (наименьшего) символа в алфавите
    for (int i = 0; i < max; i++)
        yield return ConvertFrom(i).PadLeft(length, literals[0]);
}


получим нужную нам реализацию. 

Вызывать можно например так:
Код

static void Main(string[] args)
{
    // Выведем на экран последовательно все комбинации длиной 4 символа
    foreach (var item in Generate(4))
        Console.WriteLine(item);
    Console.ReadLine();
}


Вместо последовательного числа, естественно, можно передвавать в метод ConvertFrom случайное, получая случайную последовательность.


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
СерегаГоляков
Дата 19.4.2011, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Всё супер :)
*


Профиль
Группа: Участник
Сообщений: 142
Регистрация: 26.4.2010
Где: НСК

Репутация: нет
Всего: нет



Оо, извините, мне на имайл тока сеня уведомление пришло)))

Как бендор я так и думал, я не мог придумать как если я хочу генерить слово заведомо неизвестной длины.
Всем спасибо) оставлю для 4х букв, а то сильно долгий перебор получается)
--------------------
Список всех полезных программ в ОДНОЙ программеhttps://sites.google.com/site/coolprogramms...latnyh-programm...Пьяные белазисты в карьереhttp://www.youtube.com/watch?v=6FGNGMwxJZ4
PM WWW   Вверх
-Mikle-
Дата 20.4.2011, 06:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 17
Всего: 59



Цитата(СерегаГоляков @  19.4.2011,  17:23 Найти цитируемый пост)
я не мог придумать как если я хочу генерить слово заведомо неизвестной длины

А мой вариант чем не устраивает?


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
СерегаГоляков
Дата 25.4.2011, 09:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Всё супер :)
*


Профиль
Группа: Участник
Сообщений: 142
Регистрация: 26.4.2010
Где: НСК

Репутация: нет
Всего: нет



Цитата(-Mikle- @ 20.4.2011,  06:44)
Цитата(СерегаГоляков @  19.4.2011,  17:23 Найти цитируемый пост)
я не мог придумать как если я хочу генерить слово заведомо неизвестной длины

А мой вариант чем не устраивает?

-Mikle-
Чур меня))
всё разобрался, спасибо) Эх жалко мало смс так бы + похвалить можно было бы smile
--------------------
Список всех полезных программ в ОДНОЙ программеhttps://sites.google.com/site/coolprogramms...latnyh-programm...Пьяные белазисты в карьереhttp://www.youtube.com/watch?v=6FGNGMwxJZ4
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0662 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.