A[n]의 값을 구해오는게.. O(logn) 인가요?

ole2000의 이미지

자바나, C/C++의 경우..

A라는 배열에 n개의 값이 이미 메모리에 있다고 가정하고..

n번째 값을 구해올때..

러닝타임이 O(logn) 인가요?

대충 프로그램짜서 밀리세컨으로 시간 체크해보면.. O(n)은 아니고.. O(n)보단 좀 작은것 같은데...

O(logn)인가요??

2차원배열일 경우에는 어떤가요??

A[n][n] 번째 값을 구한다면..

실제로 자바로 코드짜서 돌려보니 O(n^2) 보다는 작고 O(n)보다는 큰데...

O(nlogn) 일까요?

정태영의 이미지

O(1) 이 되어야 정상 아닌가요..?

A 가 가리키는 메모리 주소에 접근하고..
그 값에다가.. + n 을 더한 다음..

그 주소에 있는 값을.. 가져오면 되는거니까요..
배열 에 있는 값 중 어떤 값을 가져오기 위해서.. 순차적으로 검색을 한다거나.. (이런 경우 O(n) 이 되겠죠..) 바이너리 서치등을 수행(이런 경우엔 O(logN) 이 되겠구요..) 할 필요는 없습니다..

리스트나 트리로 구현된게 아니라면요..

(물론 x86 보호모드에서.. 메모리테이블 등을 이용할 테니 실제론 조금 더 복잡하겠지만요...)

오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...

http://mytears.org ~(~_~)~
나 한줄기 바람처럼..

익명 사용자의 이미지

혹시 가정이 필요한 경우가 아닌지...
* sort 되어 있다.?

* sort 되어 있지 않다.?

최종호의 이미지

어떤 알고리즘의 O(f(n)) 을 구하기 위해서는 먼저 n이 의미하는 바와, 측정하고자 하는 기준연산
(문헌에 따라서 program step 또는 baisc operation이라는 표현을 쓰기도 합니다.)
이 무엇인지를 결정해야 합니다.

아마, n은 배열의 크기일 테고, 측정연산은 (고수준의) 메모리 참조연산이 되겠죠?
실험적으로 구하실 때는 메모리 참조연산의 횟수가 수행시간과 비례한다고 가정하시고, 수행시간을 측정하셨을 테고요.

그럼 A[n] 을 수행하는데 있어서 배열의 크기에 따라서 메모리 참조연산수가 어떤 형태를 보이느냐일텐데,,

이건 배열의 크기에 상관없이 한번의 메모리 참조만 일어나기 때문에,
정태영님이 말씀하신 저수준의 처리들을 무시한다면,
실제 돌려보지 않아도 당연 O(1) 이겠죠.

O(f(n)) 을 *실험적으로* 알아보시려면 n을 바꿔가면서, 즉 배열의 크기를 바꿔가면서,
그래프에 점 찍어가면서 어떤 모양을 그리는지 보시면 되겠죠.

배열의 크기가 1, 10, 100, 1000, 10000, 100000 으로 바뀌어도,
A[n] 을 참조하는 것은 한번의 메모리 참조이므로 고정시간을 가지게 되겠죠.

아마 테스트하실 때 n을 잘못 해석하시거나 연산을 잘못 잡으신게 아닐까 생각이 됩니다.
테스트하신 코드를 올려봐 주세요.

그리고, 어떻게 구현하셨는지를 보아야 알겠지만 O(n), O(n^2), O(n log n) 을 기준으로 말씀해 주셨는데,
같은 n과 기준 연산을 바탕으로 측정된 것이 아닐 것으로 생각됩니다.

익명 사용자의 이미지

Anonymous wrote:
혹시 가정이 필요한 경우가 아닌지...
* sort 되어 있다.?

* sort 되어 있지 않다.?


sort 되어 있다면, search algorithm의 time complexity가 될 것이 자명하며,

그렇지않다면, sort + search의 time complexity를 가지게 될 것입니다.

A[M] 이라는 M의 크기를 가지는 n번째 번지( n<=M )의 값을 가져오는 것이라면, O( 1 )이 당연
그러나, 값의 크기가 n번째인 값을 가져온다면, 위를(소팅이 어쩌구..) 고려해야....

* 그러나, 실제 프로그램상으로 테스트하는 경우, 다소 시간차가 날 수도 있는데, 이는 운영체제나, VM(자바)내의 메모리 관리에 따른 오버헤드를 고려하지 않을 경우입니다.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.