Gravando 3.268.760 registros em uma tabela no SQLServer

551 views
Skip to first unread message

Carlos Alberto dos Santos

unread,
Nov 18, 2011, 10:12:11 AM11/18/11
to DotNet Brasil
Olá pessoal, voltei!

Seguinte:

Quero gravar 3.268.760 registros numa tabela do SQL Server.
Este número se dá pela combinação de 25 elementos, tomados 15 a 15.
Esta tabela tem 16 campos: id_combinacao, c01, c02, c03, ... c15.

Meu algoritmo tem a seguinte construção:

1. Conseguir o total de combinações: C25,15 => 25! / ((25-15)! . 15!)
-> Combinação de 25 elementos tomados 15 a 15, o que acarreta ou
implica em: 25 Fatorial sobre (25 - 15) Fatorial vezes 15 Fatorial:
(3.268.760) possibilidades sem repetições.

2. Iterar com 15 for aninhados;
...
RemoveCombinacoes();
...
...
for (int k01 = 1; k01 <= 11; k01++){
for (int k02 = 2; k02 <= 12; k02++) {
for (int k03 = 3; k03 <= 13; k03++){
.....
.....
.....
for (int k15 = 15; k15 <= 25; k15++){

if (k15 > k14 && k14 > k13 ... && k02 > k01){
vId++;
AddCombinacoes(vId, k01, k02, k03, ... ,
k15);
}

.....
.....
.....
}
}
}

- Com estas iterações eu consigo as combinações sem repetições:

-> Ex.:
1-2-3-4-5-6-7-8-9-10-11-12-13-14-15;
1 ... 14-16;
1 ... 14-17;
....
1-2-3-4-5-6-7-8-9-10-11-12-13-14-25;
2 ... 15-16;
2 ... 15-17;
2 ... 15-18;
....
2 ... 15-25;
....
....
....
11-12-13-14-15-16-17-18-19-20-21-22-23-24-25;
--------------------------------------------------------------------

Bom; Acontece que, tanto usando cmd.ExecuteNonQuery("vSqlInsert",
conn); quanto StoreProcedure esta rotina está demorando uma
eternidade.

- Para se ter uma idéia, gravando com código direto de inserção (sem
StoreProcedure) desisti com 10% gravados em 14 horas!!!

OBS.: Tenho algumas razões para não usar StoreProcedure.

Alguém tem alguma sugestão?
Ou alguém consegue ver um outro algoritmo capaz de fazer isso de forma
mais rápida?
Ou será que o gargalo é só na gravação efetiva dos dados na tabela?

Desde já agradeço!

Abs,

Carlos

Marcus Alexandre Silva

unread,
Nov 18, 2011, 10:41:39 AM11/18/11
to dotn...@googlegroups.com
Ja experimentou cronometrar o tempo gasto em cada ponto da interação para saber onde é seu gargalo? Voce esta abrindo e fechando conexão a cada tansação ou esta trabalhando com uma conexão sempre disponivel? Esta trabalhando com transação? 
O Servidor que esta rodando a aplicação pode apresentar melhorias se voce trabalhar em contexto paralelo?


Difícil demais te ajudar com a quantidade de informações que foram colocadas...


--
==============================
Comunidade de desenvolvedores Dot Net no Brasil

WebSite: www.dotnetbr.com

E-mail do Grupo: dotn...@googlegroups.com
==============================

Bernardo Bosak de Rezende

unread,
Nov 18, 2011, 10:52:26 AM11/18/11
to dotn...@googlegroups.com
Cara,

Vou ser sincero: tentei ler o algoritmo, entendi mais ou menos.

Antes de saber se é gargalo de banco, não tem como otimizar esse algoritmo?

Mesmo que não tenha como, C# não é a melhor linguagem para fazer isso...

2011/11/18 Carlos Alberto dos Santos <carlos.i...@gmail.com>
--
==============================
Comunidade de desenvolvedores Dot Net no Brasil

WebSite: www.dotnetbr.com

E-mail do Grupo: dotn...@googlegroups.com
==============================



--
Bernardo Bosak de Rezende
http://bernardorezende.net/ - Arquitetura e Desenvolvimento
https://github.com/bernardobrezende/ - GitHub

"The weather-cock on the church spire, though made of iron, would soon be broken by the storm-wind if it did not understand the noble art of turning to every wind."
Heinrich Heine

Jairo Azevedo

unread,
Nov 18, 2011, 11:03:41 AM11/18/11
to dotn...@googlegroups.com
Carlos, vc jah experimentou gravar o seu resultado em arquivo texto, separado por um caracter de controle (pode ser ponto e vpirgula) e subir essas informacoes via BCP ou Bulk Insert?

Felipe Vale

unread,
Nov 18, 2011, 11:21:57 AM11/18/11
to dotn...@googlegroups.com
Por que você não cria uma stored procedure no SQL Server para fazer os Inserts?


2011/11/18 Bernardo Bosak de Rezende <bernard...@gmail.com>



--
Atenciosamente,

Felipe Carvalho

Paulo S. M. Marques

unread,
Nov 18, 2011, 11:39:31 AM11/18/11
to dotn...@googlegroups.com
Você está usando C# 4.0 ???

Já leu alguma coisa sobre Paralelismo ???
http://msdn.microsoft.com/en-us/library/system.threading.tasks.parallel.aspx




2011/11/18 Felipe Vale <felip...@gmail.com>



--
Atenciosamente,

Paulo S. M. Marques - @psmarques
Analista de Sistemas
MCP / MCTS Web

daniel carli

unread,
Nov 18, 2011, 11:42:50 AM11/18/11
to dotn...@googlegroups.com
você não precisa necessariamente do c# 4.0 para implementar paralelismo. 
Daniel Carli


Juan Lopes

unread,
Nov 18, 2011, 11:44:07 AM11/18/11
to dotn...@googlegroups.com
14 horas para gravar 10% de 3.268.760?

Isso significa que você levou 14*60*60 para gravar 326.876 registros. O que dá uma métrica de quase 4 registros por segundo.

Código, por favor.

2011/11/18 Paulo S. M. Marques <psma...@gmail.com>

Gabriel Ayusso Guimaraes

unread,
Nov 18, 2011, 12:13:31 PM11/18/11
to dotn...@googlegroups.com
Rapaz...

Esse caso me interessou. Dei uma pesquisada e encontrei uma classe chamada SqlBulkCopy que - entendo eu - foi criada justamente para esse fim (link abaixo). Talvez você consiga fazer algum progresso usando-a. 

O importante para otimizar a performance é não executar comando-a-comando, tem que gerar um buffer e executar de uma vez. Isso ajuda.

Uma outra solução possível seria dropar os índices antes de fazer os inserts. Remova a primary key, depois crie novamente quando completar o processo (estou imaginando que não há concorrência enquanto vc tá fazendo o processo)

Uma solução mais desesperada, seria gerar um arquivo de texto e fazer import/export usando o wizard.


PS.: lamento não ter postado nenhum código, mas não estou em um laboratório. Seria interessante testar isso.

Att.,
Att.,
Gabriel Ayusso Guimarães
AYTO Systems

Carlos Alberto dos Santos

unread,
Nov 18, 2011, 1:09:10 PM11/18/11
to DotNet Brasil
Bom, pessoal.

Como muitos tentaram ajudar, deixa eu dar uma abusada! rs

Como ainda não domino o GitHub, disponibilizei o código no meu
servidor.
Crie uma conta FTP especial e upei o projeto e o banco de dados.

É só um teste, portanto criei, provisoriamente, um projeto pequeno com
um único form, um único banco e uma única tabela.
o Zip todo tem menos de 400k.

Se alguém tiver um tempinho e quiser dar uma olhada no meu teste,
fique à vontade.
Preciso muito destas combinações em uma tabela, pois ela faz parte de
um projeto muito grande e esta tabela é parte essencial no todo.

Poderia fazer numa linguagem com foco mais científico, mas o projeto
inteiro é mais que estatística.

------------------------------------------------
Nome de Usuário de FPT: dot...@cooperchip.com.br
Servidor de FPT: ftp.cooperchip.com.br
Porta de Servidor de FPT: 21
Porta de Servidor de SFTP: 22123
------------------------------------------------

Desde já agradeço,

Carlos

Carlos Alberto dos Santos

unread,
Nov 18, 2011, 1:12:49 PM11/18/11
to DotNet Brasil
(...) Acho que o usuário ficou confuso, pois é um e-mail: dotnet @
cooperchip.com.br

SENHA: dotnet

Mário Meyrelles

unread,
Nov 18, 2011, 1:15:44 PM11/18/11
to dotn...@googlegroups.com
SqlBulkCopy atende sim. Manda bala. Se possível, tenta não inserir o lote completo. Insere 10mil em 10mil por exemplo... 

E sim, a ideia de não ter indices ao fazer o bulk é fundamental. 


2011/11/18 Gabriel Ayusso Guimaraes <gabriel...@gmail.com>

Juan Lopes

unread,
Nov 18, 2011, 1:18:03 PM11/18/11
to dotn...@googlegroups.com
Separei um trecho marcante ~~> https://gist.github.com/1377250

2011/11/18 Mário Meyrelles <mariome...@gmail.com>

Bruno Gross

unread,
Nov 18, 2011, 1:23:27 PM11/18/11
to dotn...@googlegroups.com
Run to the hills!!!!

Diz que vc copiou da desciclopédia logo po!

hehehe

2011/11/18 Juan Lopes <m...@juanlopes.net>



--
Visite:
DotNet Br
Compras no Exterior

att.
Bruno Gross
(21) 83422729

Neryval Lima

unread,
Nov 18, 2011, 1:29:15 PM11/18/11
to dotn...@googlegroups.com
Cara, 

uma vez fiz um código parecido com este, 
para gerar todos os possíveis resultados da loteria.

Optei pelo WHILE em vez FOR...NEXT, o WHILE foi 6 vezes mais rápido!

gerei todos as 4.800.000 combinações em apenas 2 horas e 24 minutos,
inserindo dados em um SQL Server!

como faz muinto tempo, não sei se ainda tenho os códigos...
mas encontrando, posto aqui!

Neryval Lima
.NET Programmer
+55 71 8104.9679
+55 77 9942.9437
Guanambi, Bahia - Brasil
Skype : neryval.lima


Mário Meyrelles

unread,
Nov 18, 2011, 1:30:46 PM11/18/11
to dotn...@googlegroups.com
Mancada zoar o código do cara mas pqp, tem gente que precisa de aula de lógica de programação básica.

2011/11/18 Juan Lopes <m...@juanlopes.net>

Rubem Nascimento da Rocha

unread,
Nov 18, 2011, 1:34:59 PM11/18/11
to dotn...@googlegroups.com
Se seu algoritmo de combinações pudesse ser segmentado, podeira gravar
cada lote de combinações usando threads. Aí o processo poderia ser
menos lento do que já é. Mas sempre adotando em cada thread controle
transacional.

Sds.

Em 18 de novembro de 2011 11:12, Carlos Alberto dos Santos
<carlos.i...@gmail.com> escreveu:

daniel carli

unread,
Nov 18, 2011, 1:37:44 PM11/18/11
to dotn...@googlegroups.com
acredito que o problema seja a falta de um algoritmo propriamente dito,

Esses loops encadeados tornam todo o lance muito braçal.

Do jeito que tá é bem difícil ter uma melhora significativa.
--
Daniel Carli


Gustavo Freddo Breunig

unread,
Nov 18, 2011, 1:43:22 PM11/18/11
to dotn...@googlegroups.com

Leonardo R. Aguiar

unread,
Nov 18, 2011, 2:13:13 PM11/18/11
to dotn...@googlegroups.com
Tive um problema assim uma vez para gerar todos os possiveis resultados da lotofacil, resolvi com o Bulk Insert lendo de um arquivo texto e inserindo direto no banco de dados.

Infelizmente não tenho mais o código, caso contrário postaria aqui. :(

Leonardo R. Aguiar

unread,
Nov 18, 2011, 2:15:20 PM11/18/11
to dotn...@googlegroups.com
Ahhh para gerar os resultados e salvar em um arquivo texto eu lembro que usei uma rotina em python, muito mais simples que esse monte de FOR ae.

Dorgas, nunca mais eu jogo eu um código fora. humpf. :(

Juan Lopes

unread,
Nov 18, 2011, 2:15:47 PM11/18/11
to dotn...@googlegroups.com
Para não dizerem que só somente um troll. Fica ai um código que fiz agora para gerar o próximo item da combinação ordenada lexicograficamente.



2011/11/18 Leonardo R. Aguiar <leonardo...@gmail.com>

Bernardo Bosak de Rezende

unread,
Nov 18, 2011, 2:27:00 PM11/18/11
to dotn...@googlegroups.com
Juan,

Perdoe-me a ignorância, mas isso é Buckles?

Você resolveria esse problema com algum algoritmo funcional?



2011/11/18 Juan Lopes <m...@juanlopes.net>



--

Juan Lopes

unread,
Nov 18, 2011, 2:35:54 PM11/18/11
to dotn...@googlegroups.com
Não exatamente, Bernardo. Buclkes é mais para indexar as sequencias. O algoritmo que eu mostrei ai é mais simples, só pra encontrar o próximo elemento.

Além do mais, não temos memory cheap copies em .net, então qualquer algoritmo funcional tem menos performance.

No mais, tentei deixar parecido com o next_combination do C++.

2011/11/18 Bernardo Bosak de Rezende <bernard...@gmail.com>
Juan,

Artur

unread,
Nov 18, 2011, 11:14:10 AM11/18/11
to dotn...@googlegroups.com
Carlos,
 
Com 15 for aninhados pode sentar e chorar! Acho que você deveria repensar essa solução(RECURSIVIDADE), pelo que entendi você esta achando que o gargalo é a inserção, mas acho que o gargalo é a implementação do algoritmo. Agora me desculpe te perguntar, mas pra que serve esse algoritmo,é pra ganhar na mega sena?

Carlos Alberto dos Santos

unread,
Nov 18, 2011, 2:54:51 PM11/18/11
to DotNet Brasil
(...) Acabei de rodar os mesmos 10% do todo em 1h. e 7 minutos.
(Estava rodando-os em 14h.).
- Vou parar... otimizar mais ainda e volto para agradecer...

Abs,
Carlos

Bernardo Bosak de Rezende

unread,
Nov 18, 2011, 2:58:25 PM11/18/11
to dotn...@googlegroups.com
Essa thread foi/está animal:

Iniciamos com um cenário caótico, superamos um princípio de throll, trocamos algumas informações sobre assuntos interessantes e o criador está buscando melhoria constante.

Depois dessa bom findi a todos!



2011/11/18 Carlos Alberto dos Santos <carlos.i...@gmail.com>

Abs,
Carlos

--
==============================
Comunidade de desenvolvedores Dot Net no Brasil

WebSite: www.dotnetbr.com

E-mail do Grupo: dotn...@googlegroups.com
==============================

daniel carli

unread,
Nov 18, 2011, 3:14:29 PM11/18/11
to dotn...@googlegroups.com
depois mostra o código ai 


Abs,
Carlos

--
==============================
Comunidade de desenvolvedores Dot Net no Brasil

WebSite: www.dotnetbr.com

E-mail do Grupo: dotn...@googlegroups.com
==============================



--
Daniel Carli


Carlos Alberto dos Santos

unread,
Nov 18, 2011, 4:02:54 PM11/18/11
to DotNet Brasil
(...) Por que existe a reutilização de código?
- Será que este conceito é bizarro ou uma das maravilhas da OOP ?

Sabem quantas pessoas ganham a vida escrevendo códigos maravilhosos na
criação de componentes e, o que é melhor ainda, criando ou utilizando
os incríveis Design Patterns?

- Isso é porque é burrice reinventar a roda ou deixar de usar um
padrão que deu certo e que atende às suas necessidades.

Por isso estou aqui; porque acho que existe um padrão... um
componente... um algoritmo de verdade, sei lá; uma idéia de quem já
inventou a roda...
Eu só preciso desta tabela criada uma vez. Depois o código fica para
quem precisar de algo semelhante.

Posso usar memória e array. Mas isso não me serve, pois esta tabela
ganhará mais 12 campos e estes sim são extremamente relevantes.

Então... Qual o pecado de se querer o melhor dos melhores?
Ou seria melhor eu me fechar em orgulho (pois já me ferrei antes aqui
na lista) e rodar meu bacalhau em 140 horas?

(ou melhor; agora em 11 horas e 10 minutos).

Abs,
Carlos

daniel carli

unread,
Nov 18, 2011, 4:05:24 PM11/18/11
to dotn...@googlegroups.com
num entendi agora

--
==============================
Comunidade de desenvolvedores Dot Net no Brasil

WebSite: www.dotnetbr.com

E-mail do Grupo: dotn...@googlegroups.com
==============================



--
Daniel Carli


Juan Lopes

unread,
Nov 18, 2011, 4:11:08 PM11/18/11
to dotn...@googlegroups.com
Carlos, com o algoritmo que eu postei acima é possível gerar todas as combinações que você quer gerar em bem menos de 1 segundo. Por que salvar isso numa tabela?

2011/11/18 Carlos Alberto dos Santos <carlos.i...@gmail.com>

Abs,
Carlos

Jairo Azevedo

unread,
Nov 18, 2011, 4:18:18 PM11/18/11
to dotn...@googlegroups.com
Isso eh o q dah beber desde as 14:00 sem parar!
hehehehehehe

Carlos Alberto dos Santos

unread,
Nov 18, 2011, 4:35:27 PM11/18/11
to DotNet Brasil
Olá, Juan.

Porque depois vou deduzir desta tabela várias combinações.
É uma teoria estatística.

Posso criar outras tabelas e usar PK->FK, mas não estou vendo isso com
bons olhos, pois sempre terei que usar código, quando posso ter os
dados otimizados e guardados, podendo usar simples select's depois.

Não estou muito seguro disso ainda, mas depois da tabela populada vou
ter certeza.

Uma pool de empresários céticos me pediram para comprovar algumas
"teorias malucas" que lhes apresentei.
Estão dispostos a investir uma grana preta, mas eu preciso ter como
mostrar os dados consolidados a eles.

Sou meio louco com estatística, mas falta muito para eu ser um expert
com C#.

Por que C# ?

Porque fiquei fascinado com esta implementação da Microsoft, reescrita
do Zero, fortemente tipada e 100% OOP (que eu quero saber tudo, um
dia). Fiquei de bobeira!

Abs,
Carlos

PS.:
Você é bom demais cara!
Precisamos trocar mais figurinhas.
Te apresento minhas teorias malucas e você me ensina seus padrões
refinados!

Tiago Alves

unread,
Nov 18, 2011, 5:22:32 PM11/18/11
to dotn...@googlegroups.com
Carlos, 

por tudo que você falou nesse e naquela outra thread, deu a entender que a parte importante da sua idéia é o algoritmo em si, ou seja, o importante são os cálculos, correto? Pq não C++? 

--
==============================
Comunidade de desenvolvedores Dot Net no Brasil

WebSite: www.dotnetbr.com

E-mail do Grupo: dotn...@googlegroups.com
==============================



--
---------------------------------------------------
 Tiago Alves de Oliveira
 Engenheiro de Biometria

 
 Cel:  (19) 8175-2513
-------------------------------------------------------

Carlos Alberto dos Santos

unread,
Nov 18, 2011, 6:09:04 PM11/18/11
to DotNet Brasil
Olá, Tiago!

Não é imprescindível que seja em C#.
Apenas sou louco por C#.

- 85% do código não tratará de cálculos ou algoritmos complexos, mas
os 15% restantes representam mais de 95% da importancia da solução.
(analogamente à questão da distribuição de renda no Brasil).
- Naquela thread eu tava com problemas para afirmar minha teoria de
redução de custos. Mas não tinha muita certeza se meu código rodava
sem erros de lógica... se estava tudo ok, por isso pedi ajuda à
comunidade.

Desta vez minha rotina atingirá seu fim, sem dúvidas, só que está com
uma implementação horrível e tremendamente lenta.

É óbvio que não quero 15 for aninhados, mas é algo que salta aos olhos
a obviedade desta construção, da mesma maneira que é, igualmente
óbvia, a bagaça que é este código, mas preciso desta tabela e deixei
rolando enquanto buscava ajuda.

Adaptei umas idéias que me deram aqui e já melhorei muito. Deixei
rodando e a previsão é que termine até às 2:00h. de amanhã (antes eu
precisaria de quase 6 dias).

De todo modo vou pensar na sua sugestão, pois ainda tenho mais algumas
rotinas encrencadas pela frente. No entanto a maior parte é só
operações e expressões simples, manutenção, segurança, modelagem de
dados e cadastros em geral.

Abs,
carlos

Itamar Nunes

unread,
Nov 18, 2011, 6:16:31 PM11/18/11
to dotn...@googlegroups.com
ou F# ?
Atenciosamente,

Itamar Nunes
(47) 9204-4228
Gtalk: itam...@gmail.com

Daniel Freire

unread,
Nov 18, 2011, 6:30:28 PM11/18/11
to dotn...@googlegroups.com
Desse jeito não tem banco performático que aguente!

2011/11/18 Juan Lopes <m...@juanlopes.net>



--
Daniel C. Freire
(31) 8467-2331
@danielfreire

ronan...@ig.com.br

unread,
Nov 18, 2011, 8:23:50 PM11/18/11
to dotn...@googlegroups.com
Ai juan a hora é essa! Tem vaga aí nao?
-----Mensagem original-----
De: Tiago Alves
Enviado: 18/11/2011, 20:22
Para: dotn...@googlegroups.com
Assunto: Re: [.Net - BR] Re: Gravando 3.268.760 registros em uma tabela no SQLServer


Carlos,

> --
> ==============================
> Comunidade de desenvolvedores Dot Net no Brasil
>
> WebSite: www.dotnetbr.com
>
> E-mail do Grupo: dotn...@googlegroups.com
> ==============================
>

--

---------------------------------------------------
Tiago Alves de Oliveira
Engenheiro de Biometria


Cel: (19) 8175-2513
-------------------------------------------------------

--

Juan Lopes

unread,
Nov 18, 2011, 9:31:14 PM11/18/11
to dotn...@googlegroups.com
Não quero recomeçar o flame, mas gostaria de deixar uma coisa bem clara.

Fiz minha graduação na UERJ e comecei minha pós stricto-sensu na UFRJ. A última na área de algoritmos e métodos númericos. Completei inúmeras cadeiras matemáticas, do repetitivo Cálculo Numérico até a filosófica Álgebra Abstrata de Corpos.

Estou falando isso para deixar bem claro que entendo mais que o suficiente em matemática para não conseguir enxergar qualquer embasamento teórico nas afirmações que você fez até aqui.

Reitero que se você quer ganhar o respeito dos membros do grupo, vai precisa de muito mais do que palavras.

Bemjamin Quintino

unread,
Nov 19, 2011, 1:15:30 AM11/19/11
to dotn...@googlegroups.com
Procura no google: Como gerar todas as combinações da lotofácil ... Não seria mais fácil ?? heheheh

--
==============================
Comunidade de desenvolvedores Dot Net no Brasil

WebSite: www.dotnetbr.com

E-mail do Grupo: dotn...@googlegroups.com
==============================



--
Benjamin Quintino
---
Mend your speech a little, lest it may mar your fortunes. - Shakespeare, King Lear.

Carlos Alberto dos Santos

unread,
Nov 19, 2011, 9:25:56 AM11/19/11
to DotNet Brasil
Voilá, Juan!

Espetacular seu código!!!

- Acreditem ou não, já escrevi códigos dignos em outras linguagens.
To exercitando muita abstração para ser mais lógico com OOP.

O meu maior problema não era gravar os dados, mas percorrer tantas
combinações que não atendiam às regras para a gravação na tabela, ou
seja; as que estavam fora do if que chamava o método
AddCombinações(...).
Tipo:
- Eu estava fazendo:

(11 elevado à 15ª) menos minha regra:
k15>k14 && k14>k13 .... k02>k01.

Isso era ridículo!
- Dá para imaginar quantos loops não entravam no if, certo?
Nossa! Muito ridículo mesmo aquela bagaça! rs

Seu código é incrível!
- É assim que se faz, camarada!

Não estava brincando... Já li vários códigos seus; são admiráveis, de
verdade!!!

Grande abraço e obrigado pela luz.
Você não imagina quantas idéias me deu!

Carlos

Bruno Gross

unread,
Nov 19, 2011, 11:23:29 AM11/19/11
to dotn...@googlegroups.com
Cara, o que ta rolando na .Net br pra aparecerem cientistas matemáticos doidões por aqui hein???

hehehehehe

2011/11/19 Carlos Alberto dos Santos <carlos.i...@gmail.com>
--
==============================
Comunidade de desenvolvedores Dot Net no Brasil

WebSite: www.dotnetbr.com

E-mail do Grupo: dotn...@googlegroups.com
==============================



--
Visite:
DotNet Br
Compras no Exterior

att.
Bruno Gross
(21) 83422729

Bruno Gross

unread,
Nov 19, 2011, 11:32:52 AM11/19/11
to dotn...@googlegroups.com
Agora q notei! É o msm cara do algoritmo milionário.

hehehehe



2011/11/19 Bruno Gross <bruno...@gmail.com>

Renan Henrique

unread,
Nov 19, 2011, 11:40:49 AM11/19/11
to dotn...@googlegroups.com
Hahahaa
No coments.

Caio_in_dust

unread,
Nov 22, 2011, 7:05:59 AM11/22/11
to dotn...@googlegroups.com
Caracas, fiquei pasmo como o algorítimo que o Juan criou, gerei 50.063.860 combinações de 6 números entre 60 (mega sena) em apenas 5 segundos, eu havia tentado tempos atrás gerar uma quantidade bem menor e não consegui essa performace.

OBS: Não persisti nem exibi na tela.

Juan, entre trollagens e contribuições venho aprendendo muito com você e com a comunidade, muita gente fera neste grupo.

Grato,
--
Caio Humberto Francisco
-----------------------------------------------------------
"Qualquer programa cresce em complexidade até ultrapassar a capacidade do programador e quando esta pronto para funcionar já esta obsoleto." (Autor Desconhecido)

"Cuidado com seus pensamentos, eles se transformam em palavras, que viram ações e tornam-se hábitos.
Moldam o seu caráter controlando o seu destino"




Carlos Alberto dos Santos

unread,
Nov 22, 2011, 8:56:31 AM11/22/11
to DotNet Brasil
Foi por isso que eu não desisti.
Tivemos uma thread ruim há pouco tempo, mas sei reconhecer um talento
onde o vejo, e também sei reconhecer quando erro ou passo dos limites
(com ou sem razão).

- Minha mãe sempre me disse: "Filho; tem gente que não precisa ter
razão alguma, basta ter motivos...".
Eu cometi o erro de prolongar uma thread só por que tinha motivos (e
nem sei se tinha razão).
Aprendi!
Me redimi e voltei. E só porque fui capaz de voltar consegui este
algoritmo 'pequeno e gigante' do Juan.

Durante muito tempo usei 'for aninhados' para fazer esse tipo de
iteração.

Com o algoritmo dele já reescrevi várias das minhas rotinas.

Valeu, Juan!

Talento inato e refinado!!!

Abs,
Carlos

Juan Lopes

unread,
Nov 22, 2011, 9:11:07 AM11/22/11
to dotn...@googlegroups.com
Caio, se você precisa de performance, tem uma versão ligeiramente mais rápida que usa backtracking pra gerar as combinações. O bom é que ela é fácilmente adaptável para gerar permutações e arranjos. A desvantagem é que ela não é capaz de recomeçar uma sequencia a partir de um array já inicializado.

Caio_in_dust

unread,
Nov 22, 2011, 11:12:06 AM11/22/11
to dotn...@googlegroups.com
Juan, bem legal, uma coisa básica para mim é aprender conceitos, como devo pesquisar no google para aprender mais dessas técnicas que você aplica, não sei se fui claro, C# eu estudo bastante, lógica também, agora essas coisas do "mal" onde eu aprendo o conceito? É nessas horas que sinto falta de fazer um faculdade :( bem que minha mãe dizia: "Vai estudar menino!!!"

Saulo Brito

unread,
Nov 22, 2011, 11:23:31 AM11/22/11
to dotn...@googlegroups.com
Fala Caio,

Faculdade não é este mar de rosas não, vc até aprende alguns conceitos interessantes + mtas das vezes o professor sabe pouco, não esta nem ai pro aluno, ou não sabe passar o assunto corretamente.

Tive um que sabia mto inteligência artificial, + por ele saber d+ todos ficavam boiando na sala de aula.. =s

O Juan é fera, acompanho tbm o blog do elemar jr + cara ainda não entendo a maioria das coisas que eles fazem .. kkk

Sou iniciante ainda =s

Tambem gostaria de saber onde procurar sobre este assunto

abs

Caio_in_dust

unread,
Nov 22, 2011, 11:40:33 AM11/22/11
to dotn...@googlegroups.com
Tem uma engine de xadrez que o Elemar Jr. e Juan (se não me engano) estavam desenvolvendo, que eu fiquei nada mais nada menos que 5 dias lendo o blog, lendo e debugando o fonte e tem coisas que até agora eu não entendi :) mas ta valendo, em relação a faculdade acho que esse assunto já é mais que batido no grupo então não vamos entrar no merito :)

Leandro Prado

unread,
Dec 1, 2011, 8:46:21 PM12/1/11
to dotn...@googlegroups.com
kramba.... essa thread me salvou hoje....

fiz até um post sobre SqlBulkCopy


att,
Leandro Prado



2011/11/22 Caio_in_dust <caio.i...@gmail.com>
--
==============================
Comunidade de desenvolvedores Dot Net no Brasil
 
WebSite: www.dotnetbr.com
 
E-mail do Grupo: dotn...@googlegroups.com
==============================



--
-------------------------
Leandro Silveira Prado
www.leandroprado.com.br
Fone:41-9949-1144

Paulo César de França Viana pcfviana

unread,
Dec 1, 2011, 9:08:21 PM12/1/11
to dotn...@googlegroups.com
Legal. Só não entendi a necessidade de usar um DataSet e depois um DataTable. Pode usar somente o DataTable, já que vai ter somente uma tabela.

System.Data.DataTable tabela = new System.Data.DataTable();
tabela.ReadXml("");
Paulo César Viana
MCP - Microsoft Certified Professional
MCTS - Microsoft Certified Technology  Specialist
(061) 8192 9092


Reply all
Reply to author
Forward
0 new messages