Алгоритм определения перестановок слова с точкой между одной или несколькими парами символов - PullRequest
1 голос
/ 26 декабря 2010

я попытаюсь объяснить с помощью выборки.

источник:

something

вариации:

s.o.m.e.t.h.i.n.g
so.m.e.t.h.i.n.g
som.e.t.h.i.n.g
som.et.hi.n.g.
.
.
.

мне нужен алгоритм для создания максимальных вариаций, как указано вышев c # или delphi

у кого-нибудь есть идеи?

Ответы [ 2 ]

2 голосов
/ 26 декабря 2010
using System;
using System.Collections.Generic;

namespace ConsoleApplication {
    public static class ConsoleApp {
        public static void Main() {
            foreach (var permutation in Permutations("some"))
                Console.WriteLine(permutation);

            Console.ReadLine();
        }

        public static IEnumerable<String> Permutations(String value) {
            if (value.Length == 1) {
                yield return value;
            } else {
                var current = value.Substring(0, 1);

                foreach (var permutation in Permutations(value.Substring(1)))
                    yield return current + "." + permutation;

                foreach (var permutation in Permutations(value.Substring(1)))
                    yield return current + permutation;
            }
        }
    }
}
1 голос
/ 26 декабря 2010

Есть n + 1 баллов, куда вы можете вставить ..Таким образом, вы можете просто посчитать в двоичном виде, чтобы найти все варианты.

Каждый бит в вашем счетчике соответствует позиции вставки.Если бит равен 1, тогда вы вставляете ., если он равен 0, то нет.

for(int variation=0;variation<(1<<(s.Length+1));variation++)
{
  string variatedWord="";
  for(int position=0;position<length(s)+1)
  {
    if(variation&(1<<position)!=0)
      variatedWord+=".";
    if(position<s.Length)
      variatedWord+=s[positon];
  }
  yield return variatedWord;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...