:: 게시판
:: 이전 게시판
|
이전 질문 게시판은 새 글 쓰기를 막았습니다. [질문 게시판]을 이용바랍니다.
통합규정 1.3 이용안내 인용"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
08/09/28 01:51
long형 변수가 4byte니까 계산해보시면 한계치를 알 수 있으실거예요.
그리고 저정도 양의 데이터를 sorting하려면 계산 시간이 안나올 듯 합니다.
08/09/28 01:59
long형은 2,147,583,647까지 받을 수 있는거로 알고 있어요-
그리고 정렬 시간은 20분 안으로 하라고 하는데, 52만 가지고는 퀵정렬/합병정렬은 전부 20분 안으로 나오더라고요. (랜덤시) 교수님께서 퀵정렬 랜덤은 억단위로 받으라고 하셔서요.. 32bit 프로세서라서 처리를 못하는걸까요;? 방법이 없을까요..
08/09/28 02:06
long형이 문제가 아니라, local 영역 즉, 스택에서 선언할수 있는 변수들의 총크기는 정해져있습니다. 왜냐면 컴파일러에서 스택의 최대사이즈가 정의되어 있거든요. 제가 아는한 대략 2MB쯤 될겁니다 4*520000 = 2,080,000 대략 2MB쯤 돼니 죽겠네요.
08/09/28 02:13
그나저나 소스코드가 참 신기하네요... 배열크기를 저런식으로 줄수 있다니...
VC에서는 안돼고 gcc에서는 됀다니 c99같은데, 정말 신기하네요.
08/09/28 02:16
크억=ㅛ=; 그럼 이 과제는 불가능한것인가요?! 가능하니까 내줬을꺼 같은데..
가능하다면 어떤 컴파일러에서 가능한가요;; 리눅스에서 쓰는 gcc면 돌아갈려나요; 3;)?
08/09/28 02:22
음... 찾아보니 잘못말한 부분이 있군요. 위에서 2MB라고 말한건 성급했던것 같습니다. 사용하시는 시스템에서 스택사이즈가 얼마인지 확인해 보시길 바랍니다. 시스템마다 참 다양하네요. 다만 크기가 얼마이든 스택사이즈가 정의되어있으니 크기가 큰 배열은 전역이나 heap에 선언하는게 좋을것 같습니다.
08/09/28 02:31
tsuna님 말씀대로 스택 크기 문제가 맞습니다. 컴파일러 옵션을 이용해서 스택 크기를 크게 할 수는 있지만 보통 몇MB 정도 크기만 사용하고 그 이상이 되면 'new'나 'malloc'을 이용해서 heap에 메모리를 할당하셔서 사용하셔야 합니다.
long list[n]; 대신에 long *list = new long[n]; .... delete [] list; 이런 식으로 쓰시면 될 것 같네요. 근데, 램이 1기가면.. 윈도우를 쓰신다고 볼때 여유 메모리는 512MB정도일 것 같은데.. 128*(2^20)개(약 1억개) 넘게 정렬하시는 경우에는 꽤 느려질 것 같네요.
08/09/28 02:36
그리고, 참고로 데이터들이 모두 정수이고 중복된 숫자가 없는 경우에는, 1억개의 숫자들도 한 10MB의 메모리만 있으면 정렬이 가능합니다.^^
08/09/28 02:46
졍님// 오오 신기하네요! 어떻게하는건가요? 대략적인 알고리즘을 알려주실수 있으신가요? 궁금하네요.
검색키워드 같은것이라도 알려주시면 감사하겠습니다. 알아두면 언젠가는 쓸일이 있을것 같네요.
08/09/28 02:47
아하.. local과 global영역의 stack 크기가 달라서 일어나는군요'ㅛ'!!
heap으로 잡아주면 해결이 되네요. 많이 배웠습니다. 10억도 잘 돌아가네요~ 그런데 10메가로 정렬이 가능하다니; 그거 엄청난거 아닌가요!! 저는 아직 알고리즘 배우는 중이라서 그런걸 생각도 못하겠네요;; 흑흑..
08/09/28 07:31
아.. 조건을 좀 잘못 말했네요.. 0~2^32 사이의 정수이면서 중복되지 않은 경우에 가능하죠.
그냥 bitmap을 이용해서 각각의 번호가 존재하는지 여부를 저장한 뒤에, 나중에 처음부터 존재하는 숫자들을 출력해 주면 되죠. 검색은 아마 sorting with limited memory 등으로 검색하시면 나올 거에요. google interview question같은데서 나오는 문제들 중에 하나죠. DeathMage님// 일반적인 알고리즘이라기 보다는 특별한 조건하에 가능한 방법이라 알고리즘 과목에서 가르칠만한 내용은 아니죠. 굳이 말하자면 bucket sort의 응용이라고 볼 수는 있겠네요.
08/09/28 21:14
global 영역의 stack..인감..
local에서는 자동 변수니까 stack을 사용하지만, heap에서는 사용자가 delete 해줘야 하니 stack은 아닌 것 같네요^^;
|