domingo, 29 de dezembro de 2013

Utilizando concatenação de Strings com StringBuilder

Já vimos em posts passados a classe String é responsável pelo armazenamento de dados do tipo texto, isto é, guarda uma sequência de caracteres. Esta classe é java.lang.String e por incrível que pareça os objetos String são imutáveis, ou seja, depois que criado seu conteúdo jamais é alterado. Já vimos anteriormente, que na verdade quando fazemos s = "aa" e depois s = "bb", existem 3 objetos uma para cada string imutável e um objeto s que aponta primeiro para "aa" e depois para "bb". A classe é final, ou seja, não pode ser alterada por nenhuma outra classe.

Outra classe que permite manipular strings é StringBuffer (java.lang.StringBuffer) que é geralmente recomendada para armazenarmos um grande número de caracteres. Esta classe cria objetos mutáveis, ou seja, diferente de String, o seu valor (valor armazenado em sua instância) pode ser alterado,  pode ser alterado. Também é uma classe final. Esta classe tem outra característica importante: seus métodos são synchronized, assim pode ser utilizada em aplicações multithread sem qualquer alteração.

Existe ainda uma terceira classe - java.lang.StringBuilder - que implementa a mesma API de StringBuffer porém não é thread safe (seus métodos não são synchronized). Como é a mesma API apresentaremos neste post somente exemplos com StringBuffer.



Redução de Dimensões

Em implementação de aprendizado de máquina, normalmente tratamos com um volume de dados muito grande e a complexidade de qualquer classificador ou regressor depende do tamanho da entrada. Desta forma a complexidade de tempo e espaço tem relação direta com o número de exemplos de treinamento para o classificador ou regressor. Existem métodos que permitem selecionar os recursos, isto é, escolher um subconjunto de características importantes do resto, de forma que possamos tratar um volume menor de dados. Em métodos de projeção, estamos interessados ​​em encontrar um mapeamento das entradas no espaço n-dimensional original para um novo espaço k-dimensional (menor que n), com perda mínima de informação. Em álgebra linear, a decomposição em valores singulares ou singular value decomposition (SVD) é a fatoração de uma matriz real ou complexa que nos permite selecionar um subconjunto de vetores mantendo um valor grande da variação existente nos dados originais. É isto que veremos nos dois vídeos deste post.

Veja a sequência no segundo post.

quinta-feira, 26 de dezembro de 2013

Usando estilos de formatação para Strings

Vamos ver nestes dois vídeos como utilizar os recursos de formatação para criação de Strings (usando String.format) e para apresentação de Strings (utilizando System.out.printf).