알고리즘 공부를 하는데 가장 좋은 언어는?

GjtRoql의 이미지

오늘 PL 수업 도중 Haskell 로 짠 qsort를 보았습니다. C처럼 하나하나 프로그램이 어떻게 돌야하는지에 대해 신경쓰지 않고, 그냥 진짜 알고리즘에 내용을 바로 수식으로 기술 할수 있더군요!
전 알고리즘을 C/C++로 배웠습니다. 그땐 프로그램 코딩할땐 알고리즘을 시뮬레이션 해놓은걸 보고 다시 코딩을 했던 걸로 기억되네요. 코딩 도중 알고리즘은 뒷전이고 시뮬레이션을 보고 따라가기 바빴던걸로...

그래서 느낀건데 어짜피 배우는 입장에서 성능을 생각 할필요 없으니 알고리즘 같은 과목은 C/C++ 보다는 함수형언어나 기타 고급언어가 괜찮지 않나 싶네요!

다른 분들은 어떤지.

ps> 다른 외국 유명대학의 전산학과에서는 처음 배우는 언어를 함수형언어로 한다더군요. 저희 나라만 유독 C나 C++을 배우는 거 같은...
Haskell

qsort [] = []
qsort (x:xs) = qsort [y | y <- xs, y < x]
                        ++ [x]
                         ++ qsort [y | y <- xs, y >= x]


C
qsort( a, lo, hi ) int a[], hi, lo;
{
      int h, l, p, t;      
      if (lo < hi) {
            l = lo;
            h = hi;
            p = a[hi]; /* pivot element */
      do {
            while ((l < h) && (a[l] <= p))
                  l = l+1;
            while ((h > l) && (a[h] >= p))
                  h = h-1;
            if (l < h) {
                  t = a[l];
                  a[l] = a[h];
                  a[h] = t;
            }
      } while (l < h);
      t = a[l];
      a[l] = a[hi];
      a[hi] = t;
      qsort( a, lo, l-1 );
      qsort( a, l+1, hi );
      }
}
segfault의 이미지

저의 경우는 알고리즘 공부할때 파스칼을 주로 썼었습니다.

뭐... C나 비슷비슷하죠.

요새는 위에서 말씀하신 haskell이나 python이 더 효율적이지 않나 싶습니다.

GjtRoql의 이미지

파스칼을 하셨다면 Pseudo Code는 잘 보셨겠네요!

전 C를 처음 배워서 처음 Pseudo Code 봤을때 힘들었는데.

--------------
Burning Blue!
--------------

lovethecorners의 이미지

알고리즘 수업은 java (pseudocode)로 했었습니다...
근데, 어떤교수가 하느냐에따라 사용하는 언어가 정해지던것 같던데요...

redrocki의 이미지

어떤 언어에 얶매여서 알고리즘을 생각한다는 것은 생각의 굴래에 봉착한다고 볼수가 있습니다. 유독 우리나라 알고리즘 책에서는 C, C++, JAVA로 하는 알고리즘이라는 책이 많이 있습니다. 사실 첨에 접근 하기에는 무척 좋습니다. 또한, 현업에 볼때도 쉽게 접근 할 수가 있습니다. 하지만, 알고리즘을 깊이 공부하기는 부족함을 따르는 것 같습니다. 수학공식을 공부할때 원리를 알고 풀어나가면 쉽게 풀어 나갈 수가 있습니다. 이처럼, 검색, 정렬등 좀더 깊은 생각을 가지고 자신의 사고를 정리한 뒤에 자기의 손에 익숙한 언어를 선택한다면 더 좋다고 생각합니다.
사고의 독립성이 최우선입니다. 그 뒤에 언어가 따라 간다고 볼 수가있습니다.

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

Make Beautiful 世上 ~~~ Cool Mind!!

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

jj의 이미지

처음 배우는 언어라면 함수형 언어가 참 좋을것 같습니다만, 알고리즘 수업엔 함수형 언어가 적당하지 않은것 같습니다.

함수형 언어는 일단 값 중심의 언어이기 때문에, 일단 공간복잡도(?)를 고려하기에 적당하지 않습니다.

쉬트라센 행렬 곱샘 알고리즘처럼 C와 같은 언어로 매우 잘 구현해야, 실제로 성능이 나오는 알고리즘도 있구요.

--
Life is short. damn short...

segfault의 이미지

redrocki wrote:
어떤 언어에 ㅤㅇㅓㄲ매여서 알고리즘을 생각한다는 것은 생각의 굴래에 봉착한다고 볼수가 있습니다. 유독 우리나라 알고리즘 책에서는 C, C++, JAVA로 하는 알고리즘이라는 책이 많이 있습니다. 사실 첨에 접근 하기에는 무척 좋습니다. 또한, 현업에 볼때도 쉽게 접근 할 수가 있습니다. 하지만, 알고리즘을 깊이 공부하기는 부족함을 따르는 것 같습니다. 수학공식을 공부할때 원리를 알고 풀어나가면 쉽게 풀어 나갈 수가 있습니다. 이처럼, 검색, 정렬등 좀더 깊은 생각을 가지고 자신의 사고를 정리한 뒤에 자기의 손에 익숙한 언어를 선택한다면 더 좋다고 생각합니다.
사고의 독립성이 최우선입니다. 그 뒤에 언어가 따라 간다고 볼 수가있습니다.

동감입니다.

저는 알고리즘 공부할때 그냥 특정 언어에 한해서 죄다 외우기만 해서, 응용하거나 포팅하려면 참 난감할때가 있습니다...
바람직한 공부방법이 절대 아니죠.

GjtRoql의 이미지

jj wrote:
처음 배우는 언어라면 함수형 언어가 참 좋을것 같습니다만, 알고리즘 수업엔 함수형 언어가 적당하지 않은것 같습니다.

함수형 언어는 일단 값 중심의 언어이기 때문에, 일단 공간복잡도(?)를 고려하기에 적당하지 않습니다.

쉬트라센 행렬 곱샘 알고리즘처럼 C와 같은 언어로 매우 잘 구현해야, 실제로 성능이 나오는 알고리즘도 있구요.

아 그런면도 있었군요!

음~ 함수형 언어에서 공간복잡도라...

--------------
Burning Blue!
--------------

chaeso의 이미지

python 은 어떤가요?
제 생각에는 python 도 좋을거 같습니다.