Para além das funções discutidas aqui e aqui, a classe estática CombTools ainda contém mais algumas funções para manipular combinações ou conjuntos de combinações. Relembro, mais uma vez, que a classe é estática (assim como todos os seus métodos).

Os métodos são os seguintes:

string combToString(int[] comb [, string separador])

Este método devolve a combinação em formato de texto. Se não for passado um separador, os números da combinação virão separados por um espaço.

void ordenaComb(int[] comb [, bool ascendente])

Este método ordena uma combinação por ordem crescente ou decrescente. O valor por defeito do parâmetro ascendente é true, pelo que a ausência do mesmo significará ordenação ascendente. Este método contém uma implementação do algoritmo Comb Sort, de autoria original de Wlodek Dobosiewicz (1980), mas popularizado por Stephen Lacey e Richard Box (1991), a quem se atribuia, até há pouco tempo, a autoria original.

void setLinha(int linha, int[] comb, int[,] combs)
int[] getLinha(int linha, int[,] combs)

Estes métodos inserem e devolvem, respectivamente, combinações de um conjunto. Aqui é preciso fazer um pequeno desvio, para explicar porque é que preferi guardar os conjuntos de combinações num array bidimensional, ao invés de o fazer num array de arrays.

A questão tem duas vertentes: em primeiro lugar, um array de arrays ocupa mais memória, porque, em cada posição do array exterior está outro objecto do tipo array. Em segundo lugar, porque, mais tarde, ao iterar pelos arrays nas funções de filtragem, não poderia usar apenas um ponteiro, mas sim um para o array exterior, e um novo para cada array interior. Mais uma vez, seria um desperdício de recursos, além de ter uma performance inferior.

int[] fastTruncate(int[] comb, int maxSize)

Este método devolve um novo array truncado a um determinado tamanho.

bool isDiff(int[] comb1, int[] comb2 [, int dif_permitida])

Este método verifica se duas combinações são diferentes. As combinações são comparadas da menor para a maior, isto é, se a menor estiver totalmente contida na maior, as combinações não são diferentes. O parâmetro dif_permitida permite comparar chaves com até dif_permitida diferenças.

void limpaCombArray(int[,] oldCombArray, int[,] newCombArray)

Este método limpa um conjunto de combinações de combinações falsas. As combinações falsas são arrays de 0 (zeros). Este método será importante quando for preciso fazer cortes, visto que a operação de remover pedaços de um array é extremamente intensiva (na realidade, é criado um novo objecto do tipo array com menos uma posição – a cada pedaço que sai!); um método muito mais eficiente é modificar os valores para 0 na zona de corte, e depois limpar tudo de uma só vez.

O parâmetro newCombArray é conveniente vir já com o tamanho certo (ou, pelo menos, com um tamanho maior), visto que é devolvido por referência.

Apesar de todos estes métodos, é possível que ainda venham a ser acrescentados mais alguns, conforme forem sendo necessários.

Partilhar no Sapo Links Partilhar no del.icio.us Partilhar no Digg Partilhar no Twitter Partilhar no StumbleUpon Partilhar no MySpace Partilhar no Facebook

Comentários Deixar um comentário

 Categorias
 Arquivo
 Projectos em Destaque
 Últimas Postas no Blog
 Últimos Comentários do Blog