Biblioteca de classes genéricas - bugs, descrição, perguntas, recursos de uso e sugestões
Imagine que temos um conjunto de um milhão de identificadores únicos, por exemplo, mil pedidos. Como podemos verificar se existe uma encomenda com o número N naquele milhar de encomendas? Se utilizarmos uma das classes genéricas, esta tarefa pode ser realizada quase instantaneamente, num tempo constante, o que não depende do número de elementos que estamos a procurar.
Não estou nada familiarizado com o assunto. Mas o realçado parece ilógico.
Infelizmente, a biblioteca acabou de ser lançada e ainda está em bruto. Já encontrei o primeiro erro nele (vou destacar os erros por marcador):
Erro no CSortedSet:
//+------------------------------------------------------------------+ //| Class CSortedSet<T>. | //| Usage: Represents a collection of objects that is maintained in | //| sorted order. | //+------------------------------------------------------------------+ template<typename T> class CSortedSet: public ISet<T> { ... bool TryGetMin(T &min) { return(m_tree.TryGetMin(min)); } bool TryGetMax(T &max) { return(m_tree.TryGetMin(max)); } ... }
O método TryGetMax devolve o elemento mínimo em vez do máximo, assim como o TryGetMin
... Mas o realçado parece ilógico.
Porquê?
Porquê?
Fazendo hashes, ordenando-os em ordem ascendente. Mas haverá uma busca em qualquer caso.
Não estou nada familiarizado com o assunto. Mas o realçado parece ilógico.
Fazer hashes ...
Vamos definir a terminologia. Nada é instantâneo. Qualquer operação leva tempo. Quando digo instantâneo, estou a simplificá-lo para que os programadores novatos me entendam. A rigor, há várias classes de complexidade, as principais com as quais vamos lidar são as seguintes:
- CO(1) complexidade constante.
- Logarítmico: cO(log n).
- Linear: cO (n).
- Algoritmos que requerem tempo de execução não-linear.
Eu introduzi deliberadamente um sinal c - como uma espécie de constante que ocorre ao calcular o hash e outras manipulações técnicas. Mas neste caso, a discussão sobre otimizaçãoc constante está fora do tópico deste tópico. Estamos interessados aqui apenas em aulas genéricas e na sua aplicação na prática.
Fazer hashes, ordená-los em ordem ascendente. Mas vai haver uma busca de qualquer maneira.
A média de tempo O(1) pior O(n) e desempenho é altamente dependente do hash.
+
p.s. Para ilustrar, aqui está um exemplo onde este mesmo desempenho irá cair para O(n) se você não lidar corretamente com o CHashMap.
Escreveu-o muito claramente.
Vejam o que está destacado.
Sugiro simplificar os nomes - torná-los mais lógicos. Por exemplo, a CArrayList é um Array ou List em mql5 uma implementação de ambos?
Tudo isto leva a perguntas e confusão. IMHO, devemos usar stl e não C# ou Java. Ou então remova C na frente, que seja apenas a ArrayList.
Se você fizer nomes normais:
- a legibilidade vai aumentar muitas vezes.
- você terá seu próprio estilo específico de mql5.
- os principiantes poderão navegar imediatamente pelo código (porque o stl está incluído no padrão)
...
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Desde 6 de dezembro de 2017, a entrega padrão do MetaTrader 5 incluiu as chamadas classes genéricas que implementam algoritmos eficientes para armazenamento e recuperação de dados. Este tópico foi criado para descrever essas classes, exemplos de trabalho com elas e sugestões para melhorar seu trabalho.
O que é Generic? As classesGeneric são classes de modelo especiais que podem armazenar tipos de dados personalizados. A identificação do tipo é realizada no momento da compilação, o que resulta em alto desempenho.
Por que genérico? Em geral, os programadores iniciantes estão familiarizados com apenas um tipo de coleção: uma matriz. Mas há muitas tarefas em que trabalhar com uma matriz é ineficiente. Imagine que temos uma matriz composta por um milhão de identificadores exclusivos, por exemplo, mil pedidos. Como podemos verificar se nesse milhar de pedidos há um pedido com o número N? Se usarmos uma das classes genéricas, essa tarefa poderá ser executada quase instantaneamente, por um tempo constante, que não dependerá do número de elementos entre os quais a pesquisa será realizada. Há outras tarefas em que o algoritmo correto da coleção genérica pode ser mais rápido do que o algoritmo inventado por um programador.
Algoritmos genéricos. Abaixo está uma tabela de classes genéricas, com uma breve descrição do que elas fazem:
Mais tarde, continuaremos e examinaremos os recursos de implementação dessas classes.