Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Na última variante também fiz um cheque para isso. Quem precisar, pode usá-lo.
Certo. Mas como sabemos que os algoritmos fornecidos não deixam nenhum espaço em branco? O checksum não o prova. Nem o número de elementos. Afinal, a função conta os elementos que estavam lá antes do redimensionamento da matriz.
Em quase todos os apresentados, isto é implementado sem problemas, enviando uma consulta com a NULL.
Há outro requisito para o algoritmo - a colocação correta de itens dentro da matriz após a remoção de itens desnecessários. Esta verificação deve ter sido realizada primeiro. Depois há um controle de velocidade.
O código explica quais devolvem o quê. Há matrizes embaralhadas. Há em outra série.
P.S. E só para que conste. Minha função tem algumas verificações, mas não é utilizada. Mas já tem tudo isso e muito mais.
Não estou questionando o profissionalismo dos participantes e de seus lugares. Eu apenas apontei um defeito na verificação do checksum e também, a necessidade de verificação adicional da exatidão da disposição dos elementos da nova matriz.
Se tudo isso estiver correto, eu merecidamente consegui o penúltimo lugar.
Em minha prática, raramente penso na velocidade de operações específicas. Estou mais preocupado com a concisão e a clareza da solução. Foi uma surpresa para mim que esta entrada
if(Arr[q]==val){deleted++; q--;}
poderia ser lento.
Mas se você acrescentar mais um critério de avaliação do algoritmo - compacidade da solução - eu provavelmente estarei em primeiro lugar.
Se você combinar os dois critérios - Velocidade e Compressão, e calcular a pontuação média do algoritmo, então eu ocupo um lugar mais alto na tabela.
A versão de Fedoseyev, porém, é ainda mais condensada do que a minha.Entretanto, se você acrescentar outro critério para avaliar os algoritmos, Solution Compression, eu provavelmente estarei em primeiro lugar.
Sua versão do laço principal:
e esta é a de Fedoseyev:
Ambas as variantes fazem a mesma coisa. Quem tem a concisão mais concisa?
Sua versão do ciclo principal:
e esta é a de Fedoseyev:
Ambos fazem a mesma coisa. Quem tem o mais sucinto?
Ele. Ele tem isso em vez de...
for(;i<sz;i++)
É mais sucinto).
Ele tem. Ele tem isso em vez de...
Isto é mais sucinto)).
É o mesmo para o compilador.
Peter simplesmente tem muitas coisas desnecessárias, e é por isso que funciona mais lentamente do que outros (não estou nem mesmo considerando a primeira opção do tópico).
O código de Fedoseyev tem uma verificação, uma atribuição e um incremento em um loop pass (eu não conto verificações e incrementos para organização de loop).
Em contraste, você tem duas verificações, uma soma de duas variáveis, três incrementos e uma atribuição.
Toda a esperança é que o compilador otimize, caso contrário o ArraySize é executado a cada iteração.
Toda a esperança é que o compilador otimize, caso contrário o ArraySize é executado a cada iteração.
Sim, o compilador parece verificar que se o tamanho da matriz não mudar no laço, ele substitui independentemente esta função por um valor e calcula esta função apenas uma vez.
Em todo caso, se você fizer isso:
o tempo de execução da função não mudará.
Portanto, para uma maior compactação faz sentido escrevê-lo exatamente como Peter o fez :)
Mas concordo, pessoalmente, isso também me pica os olhos. Parece que a função será chamada a cada vez.
Mas concordo, pessoalmente, que isso também me corta. Parece que a função será chamada a cada vez.
imho é melhor não dar ao compilador uma escolha)
Deixe-me fazer-lhe uma pergunta,
if(contagem>6) { ArrayCopy
mais de seis - o valor obtido pela intuição científica, ou há uma justificativa?)é melhor não dar ao compilador uma escolha)
Deixe-me fazer-lhe uma pergunta,
if(contagem>6) { ArrayCopy
mais de seis - o valor é obtido pela intuição científica, ou qual é o raciocínio por trás disso?)Sim, é exatamente isso. O método do pressentimento científico. Na verdade, de 5 a 8 de acordo com minhas observações. Você pode automatizar este processo, autoajustando este número cada vez. Afinal de contas, este número pode ser diferente para diferentes processadores e sistemas.
Por exemplo, se você mudar todo o ArrayCopy e ArrayFill na classe CCanvas por este princípio, você pode obter um bom ganho em velocidade de lona.