2014-02-16 2 views
0

여름 내내 나는 입력 할 단어의 가능한 모든 조합을 사용하여 아나 그램을 풀 수있는 프로그램을 작성하기로 결정했다. 나는 그럭저럭 그것을 할 수 있었다. 그러나 그런 길에서 그것은 빨리 밖의 3-4 명의 편지 단어를 해결할 수 있었다. 그러나 무엇이라도 더 많이 그리고 그것은 나이를 투옥 할 것이다! 어쨌든 다른 사이트에서 도움을 청하는 후 어떤 남자/여자가 나를 위해 몇 가지 코드를 작성하여 문제를 해결했습니다. 이 아아 주석과 나는 그것에서 아무것도 얻을 수 있는지 확인하기 위해 오늘 또 다른 모습을 가지고 있지만, 있었다하더라도 내가 그것을 이해하지 못했다 당시나는 문자열의 순열을 나에게 설명 할 누군가가 필요하다.

, 아무것도 ...

내가 연구했습니다 순열 약 2 시간 동안 지금 나는 어디에도 가지 않고있다 - 코드는 인터넷에있다. 그러나 아무도 나에게 개념을 이해할만큼 충분히 잘 설명했다. 나는 아래에서 아직 이해하지 못했던 코드를 게시 할 것이고 누군가가 이것을 상세히 설명 할 수 있다면 그것이 어떻게 작동 하는지를 설명 할 것이다.

Public Sub permutations(ByVal WordLength As Integer, ByVal SplitLetters As List(Of Char), ByVal word As String) 

    If WordLength = 1 Then 
     results.Add(word & SplitLetters(0)) 
     count += 1        

     If count Mod updateCount = 0 Then 
      ldBar.Value = ((count/pCombinations) * 100) 
     End If 
    Else 

     For i = 0 To WordLength - 1 

      Dim newWord = word & SplitLetters(i) 

      Dim newSplitLetters As List(Of Char) = New List(Of Char)(SplitLetters) 
      newSplitLetters.RemoveAt(i) 
      Call permutations(WordLength - 1, newSplitLetters, newWord) 
     Next i 
    End If 
End Sub 

답변

2

이 방법은 재귀를 사용하여 모든 순열을 얻습니다. 예를 FUBAR를 들어, 단어를 감안할 때

, 그것은 첫 번째 문자로 차례로 각 문자를 사용하고 결합하여 모든 가능한 순열을 얻을 것이다 나머지 문자에 대한 모든 순열 :

F + permutatons(UBAR) 
U + permutatons(FBAR) 
B + permutatons(FUAR) 
A + permutatons(FUBR) 
R + permutatons(FUBA) 

첫 번째 재귀 호출의 경우 각 문자로 시작하는 모든 순열을 얻습니다.

U + permutatons(BAR) 
B + permutatons(UAR) 
A + permutatons(UBR) 
R + permutatons(UBA) 

등등. 단일 문자열로 내려 가면 모든 가능한 순열은 그 단일 문자입니다.

관련 문제