c·c++/c 프로그래밍

수억개의 자연수에서 몇개의 수찾기

바로이순간 2011. 12. 12. 19:20

안녕하세요, 

시험 기간에 과제가 나와서...이거 뭐 해결 할 방법이..

힌트라도 좀 얻고자 글 올립니다.


문제는 아래와 같은데요,


4억개의 unsigned int형 숫자가 들어 있는 txt 파일과 

찾아야 하는 숫자 5개가 들어 있는 파일이 있어요


4억개의 숫자가 들어 있는 파일 안에 찾아야 하는 5개의 숫자들이 각각 있는지 없는지

확인하는 문제인데


어떻게 해야 할까요?...

속도가 체점 기준에 있어서 받으면서 시퀀셜로 하기도 뭐하고...ㅠㅠ

힌트라도 있으면 부탁 드립니다


//현재 바이너리 서치로 찾으려고 2억개 퀵소팅 중인데...이러다 컴퓨터 미치겠어요...ㅠㅠ

====================================================================================== 


#include <stdio.h>

int main() {

    FILE* fin;

    int i;

 

    unsigned int x;

    unsigned int mydata[5]={1234,5678,9123,45678,98765};

 

    fin=fopen("data.txt","r");

  

    while(fscanf(fin,"%u",&x)!=EOF) {

        for(i=0;i<5;++i) {

            if(x==mydata[i]) {

                printf("I got the number: %u \n", x);

                break;

            }

        }

    }

    fclose(fin);

    return 0;

}

  

=====================================================

위의 프로그램을 실행하면 됩니다.

찾을려는 수가 있으면 명백히 찾아 줍니다.

 

5개가 있는 파일을 읽어서 mydata에 넣어 주거나 [1]

아니면 직접 자료를 가져와서 소스에 넣어 주면 됩니다. [2]

 

만약 파일을 꼭 읽어서 해야 한다면 [1]의 방법을 쓰면 되겠습니다.

 

위의 프로그램의 실행시간은 파일을 읽는 시간 정도 밖에 걸리지 않습니다.

정렬을 할 필요가 전혀 없는 경우입니다.

 

--------------------------------------------------------------------------------------------

 

위에서 mydata가 100개가 넘는 경우에는 mydata를 정렬한 다음

선형검색이 아닌 이분검색을 사용하면 됩니다.

이경우에도 파일을 읽는 시간 정도면 됩니다.


'c·c++ > c 프로그래밍' 카테고리의 다른 글

단어속의 한가지문자를 대문자로  (0) 2011.12.14
수자탑 만들기  (0) 2011.12.12
getch() getche() getchar()  (0) 2011.12.11
배열과 포인터  (0) 2011.12.11
문자와 배열  (0) 2011.12.11