반응형


가을...
반응형
로또예측프로그램 1차단계로 로또 경우의 수 생성 프로그램을 작성했다.

애당초에 825만건 정도의 경우의 수를 예상했으나 실제로 프로그램을 돌려보니

실제 생성될 데이터의 1/10도 생성되지 않았는데 3천만건이 넘게 생성되는 것이 아닌가???

아, 물론 큐브리드는 바보같아서 MSSQL로 바꿨더니 3천만건정도 되니까 큐브리드랑 비슷한 바보증세가 MSSQL

에서도 보이더라... (큐브리드는 200만건에서 바보가 됐었고 그래서 큐브리드가 가야할 길이 멀었다는 의미다...)

그래서 천만건은 커녕 억단위의 경우의 수를 예상하고 있었는데 아뿔사!!!!!!!!!!!!

테이블 설계를 [순서],[1],[2],[3],[4],[5],[6],[당첨회차] 이런 식으로 하고 루프를 돌렸는데

전혀 예상하지 못했던 실수가 있었다... 그것은 다름이 아니라...

1,2,3,4,5,6 이라는 경우의 수를 예로 든다면 1,2,3,4,5,6 과 2,3,4,5,6,1이나 3,4,5,6,1,2나 동일한 숫자는 순서에 상관없이

결국 같은 하나의 값이라는 결론이 예상된다... 이런... 난감한 실수를 할 줄이야...

중복데이터를 회피할 쿼리까지 만들기는 했지만... 시간관계상 마무리를 못했다...

오늘 컴백홈해서... 마무리를 지어야지.... (ㅠ_ㅠ)
반응형

큐브리드를 테스트해볼겸...
로또경우의 수 누적프로그램을 만들어서 돌려봤다.

결과? C#으로 프로그램을 좀 엉성하게 짜서그런지... 125만건 정도 입력하는데 하루가 넘게 걸렸다.
125만건을 누적하는데 걸린 시간이야 DB의 문제라기 보다는 내가 컴파일한 프로그램의 속도문제이니
별것 아닌데 문제는 큐브리드에서 125만건 정도 데이터가 누적되니...

DB메니져에서 조회쿼리를 날리면 메니져가 뻗어버린단 거다...
아마 언젠가 결과는 나오지 않을까 싶은 생각이 들기도하지만...
그걸 언제 기다리고있냔 거지...

로또발생프로그램은 그래도 계속 돌아가고 있는데 count(*)조회해보니 데이터 누적은 순조롭게 이뤄지는 듯 하다.
근데 누적이 순조로우면 뭐하나...

정작 메니져에서 조회도 못하는데...

따라서... 로또경우의 수 발생 프로젝트 잠정 보류.
다음번엔 MSSQL2005로 테스트해볼까?
반응형

C#으로 작성중인데...
내가 구상한 알고리즘은 아직 구체적이지는 않다.
단순히 [로또 6자리 45번까지 중복되는 수 없이 발생할 수 있는 모든 경우의 수를 DB화 한다.]는 것을 1차 목표로 삼고...
몇차례 테스트 후(이상하게 중복되는 수가 한개 정도 생기긴 하는데 귀찮아서 그냥 넘어가고 나중에 수동으로 지울 생각이다.)
루프를 돌려서 무한반복생성하고 있는 중이다.

보너스 숫자는 무시하고 6자리만 생성하는 것으로 하고 있는데...보너스는 어차피 6자리 선택이 우선시 되는 것이기 때문에
보너스 숫자까지 염두하기엔 나의 능력부족인지라... 아무튼 경우의 수를 발생하기 시작한지 2시간에서 3시간 정도 지난 지금...

DB에 생성된 데이터는 11만8천건 정도 되는데... 예상데이터의 1/10도 안되는 수치이다... ㅠ_ㅠ
내일 출근할때 까지도 생성이 안될 것 같다는 생각이 들 정도이니...

큐브리드를 C#에 붙여서 사용할 수 있게 된김에 테스트 삼아 돌리고 있긴 한데...
일단 연동은 잘되는 것 같다만 큐브리드 DB메니져가 조금 불편한 인터페이스다.
쿼리조회를 하니 한화면에 100건씩 조회가 되고 그이후는 페이지 넘김 방식이다.(쿼리 질의화면 에서)
게다가 한번에 5천건 단위로 조회할 때 마다 5천건이 넘는데 조회할거냐고 물어보는데 은근히 귀찮다.

옵션에서 메세지를 죽이는 기능을 찾으려고 했으나...

DB Manager에... 옵션이 없다... ㅠ_ㅠ

...
로또를 예상할 수 있는 경우의 수는 대략 800만건정도 이고...
현재 까지 14만5천건 생성됐고... 14만5천건 생성하는데 대략 2시간반정도 걸렸으니까...
경우의수 생성완료 예상 시간은 대략 4.8일 (115시간 정도) 되시것다...

시바... 경우의 수 생성 알고리즘이 후진건가 보다...
반응형
using System.Data.OleDb;

string connectionString = "Provider=CUBRIDProvider;location=127.0.0.1;Data Source=test_db;User ID=userid;Password=password;Cache Authentication=False;Encrypt Password=False;Mask Password=False;Persist Encrypted=False;Persist Security Info=True;Port=30000;Fetch Size=100";

OleDbConnection conn = null;
OleDbDataAdapter adp = null;

DataTable dt = null;

try
{
conn = new OleDbConnection(connectionString);
conn.Open();
adp = new OleDbDataAdapter(conn.CreateCommand());
adp.SelectCommand.CommandText = "select * from usr_info";
dt = new DataTable();
adp.Fill(dt);

DataGrid.DataSource = dt;
DataGrid.DataBind();
}
catch { }
finally
{
if (conn != null)
        conn.Close();
}
-----------------------------------------------------------------------------------------------------------------

간단한 큐브리드 예제이다. 

+ Recent posts