1

Тема: Повний перебір можливих слів котрі складаються з декількох літер.

Хаі. От чи то я дурний, чи чогось ще просто не розумію. Але я ніяк не можу створити алгоритм повного перебору. Ну, наприклад,  є слово ХАЙ, або ну його, нехай є 123. З нього може вийти ще декілька слів, 132, 213, 231, 312, 321. Ну там кількість - це факторіал числа літер, або цифр, як в цьому випадку.  Так от, я дивлюсь, дивлюсь, і бачу деяку закономірність. Якщо в нас ж число 123, то найлегший шлях отримати нове слово, це переставити останні дві літери місцями і вийте 132. А після цього я чомусь не знаю, що робити. Можна змінити місця вже передостанньої і передпередостанньої літери. Тоді вийде 312, далі знову змінити останнє і переостаннє і вийде 321, ну і т.д. Хм, здається, я розібрався..

2

Re: Повний перебір можливих слів котрі складаються з декількох літер.

А в чому питання?

3

Re: Повний перебір можливих слів котрі складаються з декількох літер.

Replace написав:

А в чому питання?

як перебрати всі можливі значення стрічки, котра складається з декількох літер.

4

Re: Повний перебір можливих слів котрі складаються з декількох літер.

ех, мій супер алгоритм потерпів фіаско...

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Security;
using System.Text;
using System.Threading;


namespace test
{

    class Program
    {
        private static int cnt = 0;

        private static void Main(string[] args)
        {
            string s = "123";

            Method(s,true);

            Console.ReadLine();
        }

        private static void Method(string s, bool b)
        {
            if (cnt > 6)
                return;

            char[] ch = s.ToCharArray();
            Console.WriteLine(s);
            if (b)
            {
                char c = ch[ch.Length - 2];
                ch[ch.Length - 2] = ch[ch.Length - 1];
                ch[ch.Length - 1] = c;
            }
            else
            {
                char c = ch[ch.Length - 3];
                ch[ch.Length - 3] = ch[ch.Length - 2];
                ch[ch.Length - 2] = c;
            }
            cnt++;

            string ss=new string(ch);

            if(b) Method(ss,!b);
            else
            {
                Method(ss, b);
            }

          
        }
    }
}

5

Re: Повний перебір можливих слів котрі складаються з декількох літер.

а нєє, то я трохи шось не так в алгоримті зробив. от вже нормально

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Security;
using System.Text;
using System.Threading;


namespace test
{

    class Program
    {
        private static int cnt = 0;

        private static void Main(string[] args)
        {
            string s = "123";

            Method(s,false);

            Console.ReadLine();
        }

        private static void Method(string s, bool b)
        {
            if (cnt == 6)
                return;

            char[] ch = s.ToCharArray();
            Console.WriteLine(s);
            if (b)
            {
                char c = ch[ch.Length - 2];
                ch[ch.Length - 2] = ch[ch.Length-1];
                ch[ch.Length-1] = c;
            }
            else
            {
                char c = ch[ch.Length - 3];
                ch[ch.Length - 3] = ch[ch.Length - 2];
                ch[ch.Length - 2] = c;
            }
            cnt++;

            string ss=new string(ch);

           Method(ss,!b);

          
        }
    }
}

http://не-дійсний-домен/5AX3E.png

6

Re: Повний перебір можливих слів котрі складаються з декількох літер.

а з 4 літерами не робить, ех.

7

Re: Повний перебір можливих слів котрі складаються з декількох літер.

Щось типу такого http://kbyte.ru/ru/Programming/Sources. … ;mode=show ?

8

Re: Повний перебір можливих слів котрі складаються з декількох літер.

Replace написав:

Щось типу такого http://kbyte.ru/ru/Programming/Sources. … ;mode=show ?

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

9

Re: Повний перебір можливих слів котрі складаються з декількох літер.

Вигадати велосипед на квадратних колесах?

10

Re: Повний перебір можливих слів котрі складаються з декількох літер.

Chemist-i написав:

Вигадати велосипед на квадратних колесах?

да не вигадати. а розібратися з алгоритмомммм

11

Re: Повний перебір можливих слів котрі складаються з декількох літер.

FakiNyan написав:
Chemist-i написав:

Вигадати велосипед на квадратних колесах?

да не вигадати. а розібратися з алгоритмомммм

А що Вам заважає розібратися в алгоритмі з посилання реплейса?, 57 строчок коду (зі скобочками)

12

Re: Повний перебір можливих слів котрі складаються з декількох літер.

Ось, наприклад:
http://stackoverflow.com/questions/1148 … xplanation
В двох словах: ми пересуваємося від впорядкованого за зростанням рядка ("АБВ") до впорядкованого за спаданням ("ВБА"), перебираючи всі комбінації. Для цього знаходимо найбільший спадний шматок в правій частині рядка (в рядку "АБВ" це літера В, в рядку "123654" - "654") і його межу ("Б" та "3", відповідно), після чого витягаємо найменший елемент, більший за межу, на місце межі, а решту сортуємо за зростанням.

Подякували: FakiNyan1

13

Re: Повний перебір можливих слів котрі складаються з декількох літер.

koala, як то зрозуміти -

а решту сортуємо за зростанням

на прикладі 1234 давайте розберемось хД
значить тут спадний шматок це 34 так? а межа тоді - 2. Далі витягаємо найменший більший за межу елемент і ставимо на місце межі, а межу на його місце, я так розумію. І виходить
1324, а решту сортуємо за зростанням? а що тут сортувати? воно ж вже відсортоване

14

Re: Повний перебір можливих слів котрі складаються з декількох літер.

здається,  я починаю розуміти.  будь-який набір різних символів мона представити як набір цифр, де кожному символу відповідає окрема цифра. якщо набір символів АБВ, то йому відповідає відповідний набір відповідних цифр, 123. І очевидно, що найменше число, це 123, а найбільше можливе в цьому випадку, це 321. І тепер, як ви koala і писали, нам треба від 123 пройтись до 321, але не от так 123, 124, 125, а так, щоб числа містили лише ті цифрі, котрі ми от вже маємо, тобто 1, 2 і 3. Тоді наступне число буде - 132, бо воно найменше з більших за 123, а далі вже йде 213, далі 231 і т.д. Я  ще не повністю роздуплився, але вже починаю.

15

Re: Повний перебір можливих слів котрі складаються з декількох літер.

FakiNyan написав:

koala, як то зрозуміти -

а решту сортуємо за зростанням

на прикладі 1234 давайте розберемось хД
значить тут спадний шматок це 34 так?

Ні, 4. А межа - 3. Міняємо 3 і 4, 3 "сортуємо" (очевидно, з тим самим результатом):
1243
Тепер спадний шматок 43, межа - 2. Міняємо 3 і 2, хвіст сортуємо:
1324
Шматок - 4, маємо
1342
Шматок 42...

16

Re: Повний перебір можливих слів котрі складаються з декількох літер.

ааааа, я тоді просто не побачив, що там число 123654, я думав, що там 123456. Тепер я зрозумів, чому спадний шматок так зветься хД тобто це такий рядок цифр, де вони постійно спадают до самого кінця. Ну в числі 12365987 спадний шматок буде - 987, а межа 5, вірно? тоді наступним, після цього числа, буде - 12367589 ?

17

Re: Повний перебір можливих слів котрі складаються з декількох літер.

Так саме, падаване юний.

18

Re: Повний перебір можливих слів котрі складаються з декількох літер.

koala написав:

Так саме, падаване юний.

Ви самий крутий чювак в світі хД

19

Re: Повний перебір можливих слів котрі складаються з декількох літер.

koala написав:

Ні, 4. А межа - 3. Міняємо 3 і 4, 3 "сортуємо" (очевидно, з тим самим результатом):
1243
Тепер спадний шматок 43, межа - 2. Міняємо 3 і 2, хвіст сортуємо:
1324
Шматок - 4, маємо
1342
Шматок 42...

ееее, шось ви мене дурете. Якщо далі продовжити, то буде ж 1234, а воно вже було.

20 Востаннє редагувалося koala (04.12.2013 13:04:55)

Re: Повний перебір можливих слів котрі складаються з декількох літер.

Ееее, щось ви не петраєте. Міняємо межу 3 на

koala написав:

найменший елемент, більший за межу

сортуємо решту і маємо
1423