효율이 떨어지는 코드 예시

JCH@Naver의 이미지

제목 그대로입니다. 결과 값은 똑같지만 코드의 차이로 인해 결과값까지 도출되는데 걸린시간 이나 다른 하나에 비해 컴퓨터 자원을 많이 쓰는 예시가 있을까요?
예시)
퀵정렬 vs 버블정렬
숫자를 예로들어 오름차순 나열하는 경우, 결과값은 같지만 코드의 차이로 퀵정렬이 빠른 시간안에 작업을 완료

익명 사용자의 이미지

그런 예는 끝도 없이 많고, 또 끝도 없이 만들어낼 수 있습니다.

1. 버블 정렬? 통 크게 bogosort 갑시다: https://en.wikipedia.org/wiki/Bogosort

quick sort 혹은 그 외에 실용적인 모든 정렬들 vs. bogosort

2. Carl Friedrich Gauss가 유년기에 찾아냈다는 이런 건 어때요?

def non_gauss(n):
    return sum(range(n+1))
 
def gauss(n):
    return n * (n+1) / 2

3. 엔지니어링 측면에서는, 컴파일러 최적화 옵션을 주느냐 안 주느냐에 따라 똑같이 동작하는 프로그램이라도 소요 시간/소모 자원의 양이 바뀝니다.

단,

(1) 애초에 프로그램에 좀 하자가 있어서 최적화 옵션에 영향을 받는 경우
(2) 언어 스펙에 따라 프로그램의 동작을 바꿔놓는 최적화가 허용될 수 있는 경우
(3) 멀티스레드 프로그램의 경우

등등, 최적화 옵션을 켰을 때 프로그램의 동작이 달라질 수도 있겠군요.

jick의 이미지

똑같은 계산을 하는 코드를 파이썬으로 짜면 별 거 안해도 C보다 100배 느려집니다.

...라고 말하면 초보자는 "아 파이썬은 매우 비효율적인 언어로구나! 앞으로 빠르고 효율적인 코드를 위해 C로 짜야겠다!"라고 생각하기 쉬운데...

...개발이 그렇게 딱 떨어지면 얼마나 좋겠느냐만 그렇지 않습니다. 경우에 따라서 파이썬으로 짜나 C로 짜나 속도에 아무런 영향이 없는 상황이 얼마든지 있습니다. 결국 최종적으로는 벤치마킹을 해서 숫자로 보는 게 확실하지만, 당연히 "어느 쪽이 빠를지 모르니 둘 다 짜보겠습니다"는 현실적으로 말이 안 되고, 어느 쪽이 나을지 마라 예측을 해야 되는데... 그걸 잘 하는 게 개발의 묘...(???)라고 할 수 있겠죠.

JCH@Naver의 이미지

답변 감사합니다..!

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.