2010-12-26 2 views
1

나는 샘플을주는 것으로 설명하려고 노력할 것입니다.하나 이상의 문자 쌍 사이에 점이있는 단어의 순열을 결정하는 알고리즘

소스 :

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# 또는 델파이에서 위와 같이 최대 variatons을 만들기 위해 알고리즘을해야합니까?

+7

숙제, 아마도? –

+1

마지막 예가 철자가 잘못되었거나 글자를 놓거나 옮기고 싶습니까? –

+0

철자가 잘못되었습니다. – aeon

답변

1

.을 삽입 할 수있는 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; 
} 
+0

나는 그가 다른 변이를위한 실제 결과를 찾아 낼 필요가 있다고 믿는다. –

+0

어, n-1 어쩌면? –

+0

네, 모든 변형이 필요합니다. – aeon

2
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; 
      } 
     } 
    } 
} 
+0

thats a want what :) – aeon

+3

@aeon : Welcome to StackOverflow. 이 대답이 당신이 원하는 것이라면 그것을 받아들이는 것을 고려해 볼 수 있습니다 (질문을 한 사람은 확인 표시가 있거나 위쪽/아래쪽 화살표 옆에 있어야만 대답을 받아 들일 수 있습니다). –

+0

수율. 마찬가지로 :) 재귀가 수익률로 조언을하지 않지만 ... 스택을 날려 버리고있어. –

관련 문제