递归固定列表上的颜色(颜色)

时间:2016-02-17 00:17:50

标签: vb.net list recursion colors vb.net-2010

我正在创建一个系统,可以获得图像的所有颜色128x192乘8x8正方形(换句话说,我总共有384个正方形)。 在做了一些比较之后,我通过找到像这个例子的方格,将384个方格缩小到不到一半:

  

方形(20)颜色 - >红色,绿色,蓝色,黄色,黑色

     

方形(123)颜色 - >红色,黄色

     

方形(123)将被删除,因为方形(20)具有方形(123)所具有的所有颜色。

注意:我使用的是RGB代码。

在我放置首先使用更多颜色的方块后(方块总是少于15种颜色)。

  

同一组中的所有颜色都是不同的颜色,但在其他组中它们将是相同的。

我现在的第二步是创建托盘(15种颜色),为此我需要比较更大的托盘并添加一些颜色并获得颜色的性能 我使用递归和List(Of Color)来基本尝试找到最好的托盘(15/16种颜色)。

  

性能:如果我们选择生成的托盘,我们会删除多少GroupofColors

不幸的是,我没有完全使用递归因为我的

  

GroupOfColors(0).Count-1 = 10(我们不能忘记0)

     

GroupOfColors(0).Item(11)=更改

     

GroupOfColors(0).Item(12)=固定颜色(240,220,144)

     

GroupOfColors(0).Item(13)=更改

     

GroupOfColors(0).Item(14)=更改

     

GroupOfColors(0).Item(15)=更改

基本上我需要理解的是颜色12被修复的动机,如果有人能告诉我问题在哪里,我会贬低。 (目前它进行了500900次比赛并花了2分钟来结束这部分计划)。 当GroupOfColors变得更低时,我相信更多的位置,但我没有耐心等待30分钟来对10个托盘作出反应。 (我做了数学,我应该做9995000400而不是500900,如果需要500900需要2分钟,可悲的是39908分钟= 665小时只做一个托盘,xd)

  

如果有更快的方法,请执行相同的结果,请说明。

Dim Performence As New List(Of Integer)
          Dim AllWays As New List(Of List(Of Color))'have all attemps of creating pallets
          Dim AlmostAllColors As New List(Of Color)
          Dim i As Integer
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    'Created to get Allcolors except the one of GroupOfColors(0)
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Dim dontallow As Boolean
    For Each color In AllColors
        dontallow = False
        For Each color1 In GroupOfColors(0)
            If color = color1 Then
                dontallow = True
            End If
        Next
        If dontallow = False Then
            AlmostAllColors.Add(color)
        End If
    Next
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    For Each cor1 In AlmostAllColors
        Dim Way As New List(Of Integer)
        Dim NewPallete As New List(Of Color)(GroupOfColors(0))
        NewPallete.Add(cor1)

        If NewPallete.Count = 15 Then
                ''Give the changes that will happen
                Performence.Add(Mapping(NewPallete))
                ''ADD THE WAY 
                AllWays.Add(NewPallete)
            Else
                Dim UsedColors As New List(Of Color)
                UsedColors.Add(cor1)
            recursivo(AlmostAllColors, NewPallete, UsedColors, Performence, AllWays)
            NewPallete.RemoveAt(NewPallete.Count - 1)
        End If
    Next

这是递归函数

  Sub recursivo(AlmostAllColors As List(Of Color), NewPallete As List(Of Color), UsedColors As List(Of Color), ByRef Performence As List(Of Integer), AllWays As List(Of List(Of Color)))
    Dim colorused As Boolean = False

    ''cor2
    For Each cor In AlmostAllColors
        colorused = False
        For Each color In UsedColors
            If color = cor Then
                colorused = True
            End If
        Next
        If colorused = False Then
            NewPallete.Add(cor)
            'way1.Add(j)
            If NewPallete.Count = 15 Then

                Performence.Add(Mapping(NewPallete)) ''Mapping checks the NewPallete Performence
                Dim NewPallete1 As New List(Of Color)
                For Each color In NewPallete
                    NewPallete1.Add(color)
                Next
                AllWays.Add(NewPallete1)
                NewPallete.RemoveAt(NewPallete.Count - 1)
                'way

            Else
                UsedColors.Add(cor)
                recursivo(AlmostAllColors, NewPallete, UsedColors, Performence, AllWays)
                NewPallete.RemoveAt(NewPallete.Count - 1)
            End If
        End If
    Next
End Sub

0 个答案:

没有答案