С Новым годом! Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/88: Рейтинг темы: голосов - 88, средняя оценка - 4.85
 Аватар для iRevive
0 / 0 / 0
Регистрация: 11.12.2013
Сообщений: 2

Перебор всех возможных вариантов буквосочетаний

15.01.2014, 10:04. Показов 17871. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Возникла такая задача, сделать перебор всех возможных вариантов сочетаний букв латинского алфавита, с возможностью ограничения длинны комбинации.(то-есть сделать крайней точкой комбинации из 10 букв)
Что я имею ввиду:
Есть буквы латинского алфавита a, b, c, d, e, ..., z
Нужно составить полный перебор возможных вариантов их комбинаций. Вот возможные комбинации полученные путем сложения двух одномерных массивов содержащих латинские алфавиты(то-есть все комбинации из двух букв):
страшный не форматированный вывод
aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az
ba bb bc bd be bf bg bh bi bj bk bl bm bn bo bp bq br bs bt bu bv bw bx by bz
ca cb cc cd ce cf cg ch ci cj ck cl cm cn co cp cq cr cs ct cu cv cw cx cy cz
da db dc dd de df dg dh di dj dk dl dm dn do dp dq dr ds dt du dv dw dx dy dz
ea eb ec ed ee ef eg eh ei ej ek el em en eo ep eq er es et eu ev ew ex ey ez
fa fb fc fd fe ff fg fh fi fj fk fl fm fn fo fp fq fr fs ft fu fv fw fx fy fz
ga gb gc gd ge gf gg gh gi gj gk gl gm gn go gp gq gr gs gt gu gv gw gx gy gz
ha hb hc hd he hf hg hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz
ia ib ic id ie if ig ih ii ij ik il im in io ip iq ir is it iu iv iw ix iy iz
ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp jq jr js jt ju jv jw jx jy jz
ka kb kc kd ke kf kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz
la lb lc ld le lf lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz
ma mb mc md me mf mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu mv mw mx my mz
na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu nv nw nx ny nz
oa ob oc od oe of og oh oi oj ok ol om on oo op oq or os ot ou ov ow ox oy oz
pa pb pc pd pe pf pg ph pi pj pk pl pm pn po pp pq pr ps pt pu pv pw px py pz
qa qb qc qd qe qf qg qh qi qj qk ql qm qn qo qp qq qr qs qt qu qv qw qx qy qz
ra rb rc rd re rf rg rh ri rj rk rl rm rn ro rp rq rr rs rt ru rv rw rx ry rz
sa sb sc sd se sf sg sh si sj sk sl sm sn so sp sq sr ss st su sv sw sx sy sz
ta tb tc td te tf tg th ti tj tk tl tm tn to tp tq tr ts tt tu tv tw tx ty tz
ua ub uc ud ue uf ug uh ui uj uk ul um un uo up uq ur us ut uu uv uw ux uy uz
va vb vc vd ve vf vg vh vi vj vk vl vm vn vo vp vq vr vs vt vu vv vw vx vy vz
wa wb wc wd we wf wg wh wi wj wk wl wm wn wo wp wq wr ws wt wu wv ww wx wy wz
xa xb xc xd xe xf xg xh xi xj xk xl xm xn xo xp xq xr xs xt xu xv xw xx xy xz
ya yb yc yd ye yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz
za zb zc zd ze zf zg zh zi zj zk zl zm zn zo zp zq zr zs zt zu zv zw zx zy zz

Как получить все варианты буквосочетаний из двух букв я понял:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    public void matrixMethod() {
     
        Character lettersArray[] = new Character[26];
        for (int i = 0, j = 'a'; j <= 'z'; i++, j++) {
            lettersArray[i] = (char) j;
            System.out.print(lettersArray[i] + " "); //Убеждаемся что у нас действительно массив с латинским алфавитом
        }
 
        String result[][] = new String[26][26]; //хранилище результата
        System.out.println();
        for (int i = 0; i < lettersArray.length; i++) {          //складываем два массива
            for (int j = 0; j < lettersArray.length; j++) {
                result[i][j] = String.valueOf(lettersArray[i]) + String.valueOf(lettersArray[j]);
            }
        }
        for (int i = 0; i < lettersArray.length; i++) {         //вывод массива в консоль, убеждаемся в правильности вариантов
            for (int j = 0; j < lettersArray.length; j++) {
                System.out.print(result[i][j] + " ");
            }
            System.out.println();
        }
}
Первое, что мне не нравится - массив result.
Дело в том, что он имеет фиксированный размер, могу предположить, что нужно пользоваться вектором(подойдет ли он?) либо ArrayList. Т.к. нужно будет что либо имеющее динамичную размерность, для дальнейшего расширения моего хранилища.
Второе - работа с циклами. На самом деле, можно сделать в извращенном виде:
Java
1
2
3
4
5
6
7
for (char b = 'a'; b <= 'z'; b++) {
      for (char c = 'a'; c <= 'z'; c++) {
            for (char j = 'a'; j <= 'z'; j++) {
                  /* вызов метода, который будет выполняться для каждой сгенерированной комбинации */
              }
            }
         }
Но в таком случае мне нужно будет сделать 10 циклов(зависит от длинны буквосочетания, для которого мне нужно искать комбинации), что является крайне не рациональным решением.

Третье, как мне получить все возможные комбинации из трех букв и более?
Порывшись на форуме, пришел к выводу что мне нужен алгоритм генерации перестановок. Так ли это? Если да, подскажите, как правильно его применить для работы с буквами.
Повторюсь, дело не в том, что бы найти решение задачи, а сделать его максимально эффективным и быстрым.

p.s. Возможно есть пара логических ошибок в моих предложения, писалось все после бессонной ночи попыток реализации.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.01.2014, 10:04
Ответы с готовыми решениями:

Перебор всех вариантов
Доброго времени суток...помогите пожалуйста...а то уже мучаюсь не один день...есть такая задачка сколькими вариантами можно сложить число...

Цикл для проверки подходящего ключа и вывода всех возможных вариантов
привет всем...кто может помочь, задание такое...caesar cipher (метод шифрования текста)...есть зашифрованный текст, нужно вывести все...

Перебор всех возможных строк заданной длины
Строки состоят из символов с кодами от 1 до 255. Задается длина строки и надо перебрать все возможные строки заданной длины, состоящие из...

6
max98hacker
16.01.2014, 01:36
Всё очень просто, Вам следует просто добавить swing, а потом установить окно на свободное трансформирование, вот так:

frame.setResizable(true);

После Вам необходимо инициализировать переменную brobildan типа double со значением 3,49845 в третьей строке.

03. double brobildan = 3,49845;

Прилагаю скрин решения проблемы ниже.

С Вас плюс в карму)
Миниатюры
Перебор всех возможных вариантов буквосочетаний  
16.01.2014, 12:29

Не по теме:

юный хацкер жжет :rofl:

1
 Аватар для iRevive
0 / 0 / 0
Регистрация: 11.12.2013
Сообщений: 2
16.01.2014, 23:30  [ТС]
Добротный ответ, жаль к теме отношения не имеет
0
0 / 0 / 0
Регистрация: 21.09.2016
Сообщений: 6
21.09.2016, 00:09
Люди, помогите сделать такую же вещь, как в топике это темы, т.е. "Возникла такая задача, сделать перебор всех возможных вариантов сочетаний букв латинского алфавита, с возможностью ограничения длинны комбинации.(то-есть сделать крайней точкой комбинации из 10 букв)", только с буквами русского (а не латинского) алфавита. Т.е. на выходе нужен список из всех возможных буквосочетаний русского алфавита, длиной до 6-ти букв. Сам в яве ничего не понимаю, если честно, самой явы на машине нет, у кого есть, помогите сформировать такой список, пожалуйста! на основе вышеприведённого гражданином iRevive кода. Буду благодарен!
0
0 / 0 / 0
Регистрация: 23.07.2016
Сообщений: 4
22.09.2016, 17:35
Ivan Dr,

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
private static boolean isDifferent(char[] arr) {
        char[] copied = arr.clone();
        Arrays.sort(copied);
        for (int i = 1; i < copied.length; i++) {
            if (copied[i] == copied[i - 1]) {
                return false;
            }
        }
        return true;
 
    }
 
    public static void fillInCombinations(char[] combination, List<String> combinations, int amountOfSymbols) {
        if (amountOfSymbols == 1) {
            for (int i = 0; i < 32; i++) {
 
                if (isDifferent(combination)) {
                    combinations.add(new String(combination));
                }
                ++combination[combination.length - amountOfSymbols];
            }
            combination[combination.length - amountOfSymbols] = 'а';
        } else {
            for (int i = 0; i < 32; i++) {
                fillInCombinations(combination, combinations, amountOfSymbols - 1);
                ++combination[combination.length - amountOfSymbols];
            }
            combination[combination.length - amountOfSymbols] = 'а';
        }
    }
 
    private static List<String> getCombinations(int amountOfSymbols) {
        List<String> list = new LinkedList<>();
        char[] combination = new char[amountOfSymbols];
        for (int i = 0; i < amountOfSymbols; i++) {
            combination[i] = 'а';
        }
        fillInCombinations(combination, list, amountOfSymbols);
        return list;
 
    }
0
0 / 0 / 0
Регистрация: 21.09.2016
Сообщений: 6
22.09.2016, 21:15
К сожалению, я не понимаю в этих кодах ничего, для меня это китайская грамота.
мне нужен вот такой список, только из всех возможных сочетаний букв кириллицы, длиной до 6-ти символов включительно, в виде списка или файла (.doc, .txt), или ссылка на этот файл. Для какой программы написан этот алгоритм? Для Java? У вас она установлена, вы можете этот код запустить в программе, а результат опубликовать? Если да, то заранее спасибо, я просто сам не смогу.
aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az
ba bb bc bd be bf bg bh bi bj bk bl bm bn bo bp bq br bs bt bu bv bw bx by bz
ca cb cc cd ce cf cg ch ci cj ck cl cm cn co cp cq cr cs ct cu cv cw cx cy cz
da db dc dd de df dg dh di dj dk dl dm dn do dp dq dr ds dt du dv dw dx dy dz
ea eb ec ed ee ef eg eh ei ej ek el em en eo ep eq er es et eu ev ew ex ey ez
fa fb fc fd fe ff fg fh fi fj fk fl fm fn fo fp fq fr fs ft fu fv fw fx fy fz
ga gb gc gd ge gf gg gh gi gj gk gl gm gn go gp gq gr gs gt gu gv gw gx gy gz
ha hb hc hd he hf hg hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz
ia ib ic id ie if ig ih ii ij ik il im in io ip iq ir is it iu iv iw ix iy iz
ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp jq jr js jt ju jv jw jx jy jz
ka kb kc kd ke kf kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz
la lb lc ld le lf lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz
ma mb mc md me mf mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu mv mw mx my mz
na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu nv nw nx ny nz
oa ob oc od oe of og oh oi oj ok ol om on oo op oq or os ot ou ov ow ox oy oz
pa pb pc pd pe pf pg ph pi pj pk pl pm pn po pp pq pr ps pt pu pv pw px py pz
qa qb qc qd qe qf qg qh qi qj qk ql qm qn qo qp qq qr qs qt qu qv qw qx qy qz
ra rb rc rd re rf rg rh ri rj rk rl rm rn ro rp rq rr rs rt ru rv rw rx ry rz
sa sb sc sd se sf sg sh si sj sk sl sm sn so sp sq sr ss st su sv sw sx sy sz
ta tb tc td te tf tg th ti tj tk tl tm tn to tp tq tr ts tt tu tv tw tx ty tz
ua ub uc ud ue uf ug uh ui uj uk ul um un uo up uq ur us ut uu uv uw ux uy uz
va vb vc vd ve vf vg vh vi vj vk vl vm vn vo vp vq vr vs vt vu vv vw vx vy vz
wa wb wc wd we wf wg wh wi wj wk wl wm wn wo wp wq wr ws wt wu wv ww wx wy wz
xa xb xc xd xe xf xg xh xi xj xk xl xm xn xo xp xq xr xs xt xu xv xw xx xy xz
ya yb yc yd ye yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz
za zb zc zd ze zf zg zh zi zj zk zl zm zn zo zp zq zr zs zt zu zv zw zx zy zz
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.09.2016, 21:15
Помогаю со студенческими работами здесь

Перебор всех возможных вариантов
Доброго всем дня! Есть задача: На вход дается строка из символов '0' '1' и '2' длиной не более 50. Нужно изменить число 0 на 1...

Перебор всех возможных вариантов
Предположим, у меня есть список spisok = Как вывести все возможнеы комбинации длиной 3, те xxx xxy xxu .... zzz

Перебор всех возможных вариантов в масиве
Доброй ночи. Столкнулся с проблемой нужно перебрать ВСЕ варианты (для упрощения) массива. Для примера массив (динамический)...

Перебор всех возможных вариантов (рекурсивно)
Не буду вникать в суть программы. Предположим у меня есть архивы с точками, мне нужно выбрать минимальную комбинацию, этих архивов что бы...

Перебор всех возможных вариантов массива
Добрый день. У меня такая задача, имеется два массива одинаковой размерности. Мне заведомо известно, что при правильной расстановке строк в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru