임의의 배열에서
가장 작은 것을 찾는건 O(N)이지. (N은 배열의 길이)
그럼 k번째 작은 것을 찾는건 어떻게 할까?
가장 작은 것을 찾는 걸 k번 하면 찾을 수 있긴 한데, 이 방법은 빠르지 않음.
효율적인 방법은?
사실 k가 N에 가까우면 n-k + 1번째로 큰 숫자를 찾으면 되는 건데,
k 가 N/2일때, 즉 k번째 작은 것을 찾아야 한다면 O(N^2/2)가 되므로, O(N^2)임.
이 방법 제외하고 O(N)에 찾는 방법이 있음.
사실 거의 모든 분야의 거의 모든 방법이 보통 사람들이 그냥 막 쓰는 방법보다 효율적인(점근적으로) 방법이 있음.
어셈블리 막 써서 빠른 소프트웨어를 만드는 게 아니라, 대부분 알고리즘을 개선하는 방법으로 소프트웨어를 빠르게 만듬.
알고리즘을 공부 안한다면 1.저런 방법을 모르고, 2.저런 방법을 생각해낼 수 없고, 3.남이 만든 저런 방법을 보고 이해하지도 못해서
느린 코드를 만들어내야 할 수밖에 없음.
공부방법좀요 ㅠㅠ 공부하고싶어요
병-신-인-가.... 저런건 그냥 유명인들이 발견해낸 검색, 정렬 스킬일 뿐이지. 저런건 알고리즘이라고 안해 씨발.
n타임이면 quick selection 말하시는 건가요?
저런건 진정한 알고리즘이 아니라 책장수들이 독자들로 하여금 "어맛 이건 사야해"이렇게 유도하는거에 지나지않음. 알고리즘은 자고로 자기가 만드는 프로그람에 적용할 수 잇는. 엉? 아무튼 예를들어 숫자를 입력받고 출력할때, 먼저 입력을 받고 출력받는것........... 이 순서같은 것들이 알고리즘임
ㅁㄴㅇㄹ//
https://en.wikipedia.org/wiki/Selection_algorithm
정렬과 검색은 컴싸에서 가장 중요하게 다루는 알고리즘인데?..
ㅁㄴㅇㄹ//그걸 언어 제약조건이라고 하는거신데..
컴싸가 무슨건지 난 모르겠고 컴퓨터용싸인펜인가? 아무튼 저런건 그냥 검색, 정렬을 효율적으로 하는 스킬일 뿐이라고. 니가 저런걸 알아봤자 어차피 나중엔 가져다 쓰게 되.
그래서 정녕 알고리즘이라는 건 뭐냐면, 프로그램의 흐름상에서 어떤 함수가 먼저 호출대야하는가. 어떤 조건에 분기해야하는가. 이 각각 순서... 즉 중요한건 논리임.
그래서 알고리즘을 배운다? 그런데 니들은 사이트를 가서 문제를 풀고 이상한 병신 알고리즘책들을 사서 그런걸 보 곤한다.
그러나 그건 다 개같은 개수작임. 가치도없음
저런걸 모르면 가져다 쓰지도 못하겠지 그리고 남들이 구현해놓은게 없을땐? 손빨고 상사던 PM이던한테 가서 저 못해용 헤헤 이러기나 하게?
STL은 선형 자료구조까지만 있드라구 그러니까 우리모두 앨-고리즘을 배워두자
ㅁㄴㅇㄹ//그건 언어에 따라 알고리즘을 구현하는 측면이지..
남들이 구현해놓은게 없을 순 없고.(니가 처음 구현하는거면 니가 그 스킬을 발견하므로써 너는 상을 받을거임. 그러나 내 예상으로 향후 1000년간 더 신박한 스킬..즉 니가 말하는 알고리즘 새로운 알고리즘은 안나옴)그러니까 스스로 구현할때는, 내가 말햇지만 직접 구현하면됨. 그런데 어떻게 구현할것이냐. 이게 너가 말하는 중요한점인가? 구현은 내가말햇지. 그냥 조건 어떤조건에 분기할건가 어떤 순서로 함수를 호출할건가. 반복은 몇번할건가. 이게 중요할 뿐임 ㅇㅋ?
ㅁㄴㅇㄹ//니말대로라면 Quick Sort를 함수형 언어에서 구현하는거랑 절차형 언어에서 구현하는거랑 많이 다른데, 그걸 다른 알고리즘이라고 하나?
즉, 니들이 말하는 알고리즘 그딴건 하나도 안중요함. 선택정렬이니 삽입정렬이니 그런건 어떻게 이루어지고 그런것만 알면되고. 정작 중요한건 논리임
잡대컴공//뭔 소리야 시바 잡대컴공이라서 대화가 안되는군 ㅅㄱ
알고리즘 문제는 1)알고리즘을 얼마나 잘 이해하고 있는가, 2)구현을 어떻게 하는가. 둘 다 보는 경향이 있으니깐 그런거지
즉, 니들이 말하는 알고리즘 그딴건 하나도 안중요함. 선택정렬이니 삽입정렬이니 그런건 어떻게 이루어지고 그런것만 알면되고. 정작 중요한건 논리임27.100.*.* <<어떻게 이루어지는지 아는 거 자체가 알고리즘 공부하는거라고..
알고리즘 공부 중요하다고 생각하는데...... 나는 대학교 1학년 때부터, 알고리즘 문제들 푸는걸 좋아해서 1주일에 1~2문제 정도 꾸준히 풀었는데.. 친구들이랑 프로젝트하거나 같은 코딩해보면.. 진짜 비효율적으로 코딩함. 아무리 HW가 빨라졋다지만 진짜 무식하게 코딩하면 100ms 걸릴걸 10s넘게 걸리게 짜는 애들이 수두룩함.
미국이나 일본에서도 컴공과애들 알고리즘, 자료구조, 문제해결 등등 필수 과목으로 지정해놨는데... 알고리즘 무시한다는건 그냥 니들이 편하게 공부하려는 놀부심보로 밖에 안 보임.
그리고 삽입정렬 이런거만 알고리즘이 아니라. 글쓴이가 한것도 알고리즘 맞음... 알고리즘 개념 자체부터 배우고 오시길...