PGR21.com
- 모두가 건전하게 즐길 수 있는 유머글을 올려주세요.
- 유게에서는 정치/종교 관련 등 논란성 글 및 개인 비방은 금지되어 있습니다.
Date 2015/10/13 14:18:24
Name Rated
File #1 캡처.PNG (12.7 KB), Download : 45
출처 http://todayhumor.com/?humorbest_1132722
Subject [기타] [컴공] 정신나간 정렬 알고리즘


머지 하다가 그제서야 이해했습니다..

저런 정신나간 생각을 한것 자체가 대단합니다.

단 아규먼트가 많을시 속도장담은 ^^;

웨건은 귀찮아서 등판안합니다.

통합규정 1.3 이용안내 인용

"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.
법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
15/10/13 14:20
수정 아이콘
크크크크크크 무슨 정렬이라고 불러야할까요..?
15/10/13 14:22
수정 아이콘
슬립정렬알고리즘 이죠 크크크크
15/10/13 14:23
수정 아이콘
신박하네요.

sleep() sort 라고 불러야 할려나요;;;

대신 정렬할 숫자 갯수 만큼 process가 fork되면;;;
나일레나일레
15/10/13 14:25
수정 아이콘
처음에는 신박하네 정도로 생각했다가, 보면볼수록 화가 나던 정렬이네요.
15/10/13 14:26
수정 아이콘
착한 빡침 인정합니다
랜덤여신
15/10/13 14:30
수정 아이콘
인자의 수와는 관계가 없습니다. 가장 큰 수에 비례하죠. 시간 복잡도로 따지면 O(n)이 아니라 O(max(v))인 셈입니다.
15/10/13 14:33
수정 아이콘
아 맞네요..
다이어트
15/10/13 14:33
수정 아이콘
여러개가 동시에 돌아가니 O(nv) 로 봐야하지 않나요.
테바트론
15/10/13 14:40
수정 아이콘
여러 개가 돌아가도 어차피 가장 큰 v시간 안에서 전부 실행이 끝나니까요.
단 메모리 복잡도는 음....
15/10/13 14:31
수정 아이콘
O(n)?!??!
15/10/13 14:33
수정 아이콘
문송합니다 ㅠㅠ
세츠나
15/10/13 14:38
수정 아이콘
이걸 printf하지 말고 배열에 집어넣으면 실제로 사용할 수도 있지 않을까...
fork 대신 pthread 돌려서 값 받아오면 한정적인 경우에는 상당히 빠른 소팅이 될 듯
근데 실제로 써먹을 수 있는 경우는 거의 없을거 같군요...
와트니
15/10/13 14:39
수정 아이콘
이과망했으면...
아만자
15/10/13 14:39
수정 아이콘
http://rosettacode.org/wiki/Sorting_algorithms/Sleep_sort 다양한 버전을 체험하세요~
세츠나
15/10/13 14:41
수정 아이콘
아 여기서 이미 스레드를 이용하고 있네요 크크
Cazellnu
15/10/13 14:41
수정 아이콘
사실 소팅을 하지는 않고 슬립순서대로 찍는것 뿐이니 소트라고 하기엔 뭣하기도 합니다.
세츠나
15/10/13 14:43
수정 아이콘
여기선 슬립 순서대로 printf를 하고 있지만 컨테이너를 이용하면 되죠.
예를 들면 vector<int> sorted 같은걸 만들어서 스레드가 종료되는 순서대로
sorted.push_back(ret); 해주면 되죠. 잠깐 생각해본거지만 돌아갈 거 같아요.
세츠나
15/10/13 14:52
수정 아이콘
딱히 컨테이너 안써도 그냥 배열 잡고 카운터 만들어서 스레드 종료되면 리턴값 받아와서
array[counter] 위치에 집어넣고 counter++ 하면 되지 않나요...될 거 같은데...
써니는순규순규해
15/10/13 15:21
수정 아이콘
대충 테스트 해봤는데 잘 되네요 크크크
unity C# 에서 StartCoroutine - IEnumerator 랑 yield return null 이용 했습니다.

public int arrayCount = 0;
public int[] randArrays;
public int[] resultArray;
// Use this for initialization
void Start () {
randArrays = new int[Random.Range(10, 20)];
for (int i=0; i<randArrays.Length; i++)
{
randArrays[i] = Random.Range(i + 5, 1000);
}
resultArray = new int[randArrays.Length];
for (int i=0; i<randArrays.Length; i++)
{
StartCoroutine( sleepNull(randArrays[i]));
}
arrayCount = 0;
}

// Update is called once per frame
void Update () {

}
IEnumerator sleepNull(int arrayNum)
{
for(int i=0;i<arrayNum;i++)
{
yield return null;
}
Debug.Log ("arrayNum : " + arrayNum);
resultArray [arrayCount] = arrayNum;
arrayCount++;
}

resultArray 안에 정렬된 값이 순서대로 잘 들어 오네요...대신 시간이...

본문처럼 시간으로도 해봤습니다. 마지막만
IEnumerator sleepNull(int arrayNum)
{
yield return new WaitForSeconds(arrayNum);
Debug.Log ("arrayNum : " + arrayNum);
resultArray [arrayCount] = arrayNum;
arrayCount++;
}
이렇게 바꾸면 되고, 시간 단위로 잘 동작 하네요..
세츠나
15/10/13 15:42
수정 아이콘
Profit!
한글8자
15/10/13 17:08
수정 아이콘
출력 스트림이 콘솔일 뿐이지 정확하게 정렬 알고리즘이 하는 일에 부합하는 것 같습니다.
트릴비
15/10/13 14:42
수정 아이콘
크크크크크크크크크크
트릴비
15/10/13 14:44
수정 아이콘
n개의 쓰레드를 쓴다니 컨텍스트 스위칭을 감수하면서라도 쓸만한 엄청난 성능의 알고리즘이겠죠?
15/10/13 14:43
수정 아이콘
그래도 c를 재활용함으로써 메모리의 증가도 최소화하고 있습니다. 나름 심오한 소스입니다 크크
티오 플라토
15/10/13 14:46
수정 아이콘
그러니까, 1은 1초 기다렸다가 프린트하고, 2는 2초 기다렸다가 프린트하고, 11은 11초 기다렸다가 프린트하니까 순서대로 프린팅된다는 소스인거죠?
써니는순규순규해
15/10/13 15:03
수정 아이콘
15/10/13 14:59
수정 아이콘
이과망해라
빈즈파덜
15/10/13 14:59
수정 아이콘
sleep이 정확한 초단위로 동작한다면 문제 없는 소스인거 같아요~
세크리
15/10/13 15:15
수정 아이콘
그냥 멀티프로세서 실행 환경에 따라 extream한 경우 잘못작동할수도 있는거 아닌가요? fork하는 도중 중간에 뭐가 끼어들어서 몇초씩 잡아먹으면 그냥 틀린것 같은데...
The Special One
15/10/13 15:19
수정 아이콘
같이 놀고싶어도 알아들을수가 없..
김성수
15/10/13 15:27
수정 아이콘
왜 피지알에서는 이런 글이 흥하는걸까 -_-; 크크
돌고래씨
15/10/13 17:34
수정 아이콘
프로그래머들이 많은거 같아요 크크 얼마나 되려나...
Blooming
15/10/13 15:33
수정 아이콘
창의력대장 인정합니다;;
검정치마
15/10/13 15:35
수정 아이콘
뭔지 모르겠지만 일단 웃어야 겠다.
크크크크크킄하하하하
아이유
15/10/13 15:37
수정 아이콘
이게 뭔소리야..
15/10/13 15:40
수정 아이콘
이과 망했으면...
바닷내음
15/10/13 15:41
수정 아이콘
알기 쉽게 말하자면 순서를 크기 순서대로 정렬하는데 기존에 있는 여러 정렬 방식은 어쨌거나 숫자들을 비교하면서 정렬하는데 저거는...
5 <- 넌 5초뒤에 출력되라
1 <- 넌 1초뒤
2 <- 넌 2초뒤
....

고로 1초뒤에 1이 2초뒤에 2가... 마지막으로 11초뒤에 11이 출력됨으로써 정렬이 완료됩니다;;

시간과 리소스(숫자 하나하나마다 프로세스를 띄우므로;;) 를 무지막지하게 낭비하지만 발상이 독특한;;; 기법이자 결과가 프린트로밖에 남지않는..
쓸데없이 고퀄? 인 방식이네요.
세츠나
15/10/13 15:43
수정 아이콘
fork쓰지 말고 thread쓰고 결과값을 print하지말고 배열에 집어넣으면 될 것 같습니다.
고기덕후
15/10/13 15:43
수정 아이콘
Child process들이 어차피 sleep 상태에 가기 때문에 CPU 자원 소모는 그리 문제되지 않을 것으로 보입니다.

문제는 윗분이 말씀하신 것처럼 sorting time이 O(max(v))인 것과... 일반적으로 리눅스에서 user 당 max process 수를 정해두기 때문에 숫자 개수가 10000~20000개를 넘어가면 동작하지 않는다는 것 정도? Sleep의 길이가 너무 짧아지면 race condition에 관련된 이슈가 있을 것 같기도 하고...
15/10/13 15:46
수정 아이콘
이과 망했으면...
F.Nietzsche
15/10/13 15:48
수정 아이콘
창의적이고 신묘하군요 크크
Dark and Mary(닭한마리)
15/10/13 15:59
수정 아이콘
문과 흥했으면...
태랑ap
15/10/13 15:59
수정 아이콘
이과 망했으면...
15/10/13 16:09
수정 아이콘
C/C#문법을 몰라 웃지못하는 컴공이 여기있습니다!
fAwnt4stIC
15/10/13 16:56
수정 아이콘
C를 아는데 이해를 못하는 나는 뭔가....
한글8자
15/10/13 17:00
수정 아이콘
크크 쓸데는 없지만 크크크 창의력에 점수를 줘야겠군요
litlwing
15/10/13 17:16
수정 아이콘
무릎을 탁! 치고 갑니다 ^^
위에서들 말씀하시는대로, printf 대신 적절한 자료구조에 리턴값을 (경쟁적으로) 넣는 것으로 하고
슬립 값을 초단위 대신 가능한한 작은 단위로 슬립하게 하면 나름 쓸만한 성능이 나오지 않을까요? 흐흐...

ps. 하지만 결과값 넣는 자료구조 사용할때 세마포를 쓰는 걸로 망할듯...
15/10/13 21:05
수정 아이콘
와...진짜 할말이 안나오네요 크크크크크크크 창의력 대장들 같으니라고
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회
253860 [유머] 시리우스 아재요.. [1] 길갈3090 15/10/15 3090
253859 [연예인] 포풍같은 습격 [3] 좋아요3220 15/10/15 3220
253858 [연예인] 민아 레전드 [5] 좋아요4892 15/10/15 4892
253857 [기타] 한 눈에 보는 현대미술 종류 [4] legend4370 15/10/15 4370
253856 [유머] 공포의 컨셉 아이돌 [2] legend3910 15/10/15 3910
253855 [연예인] 설현같은 여자랑 결혼하기 vs 설현같은 딸 낳기 [21] 좋아요6584 15/10/15 6584
253854 [유머] 미국 유우머 [13] legend4606 15/10/15 4606
253853 [연예인] 연말 깡패의 위엄.jpg [6] 7114 15/10/15 7114
253852 [연예인] 은근 쫌 음란마귀한 신인그룹 노래 [2] 좋아요3779 15/10/15 3779
253851 [기타] 포 더 호드!!! [6] legend4056 15/10/15 4056
253850 [기타] 석상과 비밀의 방 [1] legend2834 15/10/15 2834
253849 [유머] 깐죽깐죽 [7] legend4157 15/10/15 4157
253848 [텍스트] 전세계 형량 TOP11 [16] legend10555 15/10/15 10555
253847 [연예인] 오늘자 안형 오렌즈 팬싸인회 사진.jpg [6] Anti-MAGE7709 15/10/15 7709
253845 [서브컬쳐] 데드오어스트라이크 [7] 고스트6687 15/10/15 6687
253844 [동물&귀욤] 냥희준.gif [4] 하루일기4119 15/10/15 4119
253843 [방송] 영화 클래식 OST [11] 삭제됨3758 15/10/15 3758
253842 [스포츠] 엔씨 불펜의 비밀병기 [26] 쿨럭6491 15/10/15 6491
253841 [기타] IMF 사태가 발생한 이유 [41] 피로링8124 15/10/15 8124
253840 [유머] 다 먹으면 1000달러 [30] 피로링8035 15/10/15 8035
253839 [유머] 매드 알바 [10] 피로링5297 15/10/15 5297
253838 [유머] 기적의 영어해석 [35] 소야테7673 15/10/15 7673
253837 [유머] 성공해야 하는 이유 [18] Madmon6412 15/10/15 6412
목록 이전 다음
댓글

+ : 최근 1시간내에 달린 댓글
+ : 최근 2시간내에 달린 댓글
맨 위로