C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[7099] Re:검색 관련된 몹시 급한 질문입니다.
인디오 [] 2166 읽음    2001-05-02 13:10
이정득 님이 쓰신 글 :
: 안녕하십니까. 이번에 C++ Builder 처음 입문하는 초보입니다.
: 전 그 전까지 자바로 주로 개발을 했기때문에 빌더에서 엄청난 방황을 하고 있습니다.
:
:
: 제가 궁극적으로 하고자 하는 것은 사전에서 단어 검색을 구현하는 것인데.. 그 검색이 사전처럼 한글자만
: 입력하면 그 글자로 시작하는 row에 focus가 옮겨지는 것입니다.
: 단어들 리스트는 왼쪽 DBGrid에 처음 프로그램을 실행할 때 다 불러오구여...
: 그런데.. 속도가 무지하게 느립니다. Locate의 Options에 loCaseInsensitive를 썼습니다만...
: 사실 이것보다 loPartialKey가 맞는거죠.loPartialKey는 정말 못봐줄 정도로 느립니다.(2초정도)
: 현재 ADO와 Access DB를 사용하여 약 5만5천건의 데이터를 1차적으로 처리하고 있습니다.
: 그런데 2차적으로는 20만건 이상이 되야 하거든여...
: 도대체 다른 사전의 로직은 어떻게 되어 있는 것인지.. 알 수가 없네요.
: 어떻게 그렇게 많은 데이터를 그렇게 빨리 처리하는지...
: 제발 좀 알려주세요.
: 지금 이것만 3일째.. ㅠ ㅠ 해결을 못하고 있습니다.
:

안녕하세요... 님이 몹시 급한 질문이라는데 제가 엉뚱한 얘기를 하는게 아닌지 심히 걱정이 됩니다.. 혹시나 원하는 방법이 아니더라도 너무 뭐라고 하지 마시길...
님이 어떤 방법으로 프로그래밍을 하고 있는지는 정확하게 잘 모르겠습니다.. 하지만 프로그램이 첨 시작할때 이미 한번을 불러왔다면 굳이 쿼리를 계속해서 원하는 결과를 가져올 필요는 없을것 같습니다..
이미 한번을 불러왔으니까.. DataSet에 모든 내용들이 들어가 있을 것입니다... ( 참 그리고 첨 시작할때 모든 데이터는 정렬이 되어 있겠죠..? 당연한 건가..? ㅡ.ㅡ;## )

여기서 부터는 어떤 방법을 써서 가져오는가가 젤루 중요한데... 일단 정렬이 되어 있으니까.. Binary Search 방법을 쓴다고 가정을 하죠..

데이터의 총 row수를 가져옵니다... 가령 예를 들어 10000 개의 데이터가 있다고 가정을 하죠.. 여기서 가운데면 5000 정도가 되겠죠..? 5000번째 있는 row의 내용을 가져옵니다.. DataSet에서 지정한 row로 이동할 수 있는건 아시겠죠..? ( 당연한 걸 자꾸 물어봐서 죄송함다.. ^^; ) 여기서 님이 비교를 하고 싶은 글자 예를 들어 사전의 특정 키워드를 가지고 있는 필드와 스트링 비교를 합니다... 만약 입력한 값이 더 큰 아스키 값을 가지고 있다면 5001 부터 10000 사이의 내용 그러니까.. 음... 얼마지..? 7500 정도가 되겠군요... 이것을 가져오고 또 비교를 합니다.. 만약 입력한 내용의 아스키가 더 작다면 5001에서 7500 사이의 값.. ( 에궁 얼만지 답이 안나온다.. ㅡ.ㅡ;## ) 하여튼 중간 값을 가져오고 또 비교를 합니다..

이렇게 해 나가는 것이 Binary Search 니까.. 이론대로 한다면 최악의 경우라도 log N 의 성능을 가지게 될껍니다..

이렇게 해서 찾은 내용의 row 값을 알아내서 그 row에 포커스를 준다면 빠른 해결이 가능할 것 같기도 한데요... 저도 해보진 않았습니다.. 그냥 이론적으로 그렇게 될 것 같다는 말이죠... ^^;

그럼 수고하세요... 부디 도움이 되었으면 하네요... ( binary search의 예제는 많은것으로 알고 있습니다. )

+ -

관련 글 리스트
7096 검색 관련된 몹시 급한 질문입니다. 이정득 2003 2001/05/02
7099     Re:검색 관련된 몹시 급한 질문입니다. 인디오 2166 2001/05/02
7103         Re:Re:검색 관련된 몹시 급한 질문입니다. 송영환 2106 2001/05/02
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.