views:

86

answers:

2

I have written code to implement an algorithm I found on string permutations. What I have is an arraylist of words ( up to 200) and I need to permutate the list in levels of 5. Basically group the string words in fives and permutated them. What I have takes the first 5 words generates the permutations and ignores the rest of the arraylist? Any ideas appreciated.

Private Function permute(ByVal chunks As ArrayList, ByVal k As Long) As ArrayList
        ReDim ItemUsed(k)
        pno = 0
        Permutate(k, 1)

        Return chunks
    End Function


    Private Shared Sub Permutate(ByVal K As Long, ByVal pLevel As Long)

        Dim i As Long, Perm As String
        Perm = pString ' Save the current Perm
        ' for each value currently available


        For i = 1 To K

            If Not ItemUsed(i) Then
                If pLevel = 1 Then
                    pString = chunks.Item(i)
                    'pString = inChars(i)
                Else
                    pString = pString & chunks.Item(i)
                    'pString += inChars(i)
                End If
                If pLevel = K Then 'got next Perm
                    pno = pno + 1
                    SyncLock outfile
                        outfile.WriteLine(pno & " = " & pString & vbCrLf)
                    End SyncLock
                    outfile.Flush()
                    Exit Sub
                End If
                ' Mark this item unavailable
                ItemUsed(i) = True
                ' gen all Perms at next level
                Permutate(K, pLevel + 1)
                ' Mark this item free again
                ItemUsed(i) = False
                ' Restore the current Perm 
                pString = Perm
            End If
        Next

K above is = to 5 for the number of words in one permutation but when I change the for loop to the arraylist size I get an error of index out of bounds

A: 

Index out of bounds error usually happens when you start the loop from 1 to length. The the for loop as following.


    For i  = 0 to array.length - 1
maxthephilosopher