[완료] if else 없이 빨리 찾는 법
글쓴이: sjlee96 / 작성시간: 수, 2010/10/20 - 2:52오후
안녕하세요.
빠른 검색을 위해서 if else문을 쓰지 않고 싶은데 어떻게 방법이 없을까 해서 고수님들께 질문드립니다.
예를 들어,
제가 200도란 각도를 알고 있는데,
동그란 파이가 다음과 같이 나눠져 있습니다.
A: 0<= x <120
B: 120<= x <250
C: 250<= x < 360
물론 if else문을 쓰면 파이 조각 B에 200도가 포함된다는 걸 알고 있는데,
if else를 쓰지 않고 바로 B라는 것을 아는 방법이 없을까요?
이런 A,B,C란 그룹이 수천개가 있으면 일일이 if else로 해서 검색하는 건 상당히 비효율적으로 보이는데,
무슨 방법이 없을지 고수님들께 도움을 요청합니다.
아시는 분 한 수 알려주십시오.
감사합니다.
Forums:
그룹간의 규칙을 생각해보시면
수식으로 정리될것 같은데요?
답변
답변 감사드립니다.
수식으로 정리한다는 것이 잘 이해가 되지 않는데요.
조금 더 자세히 설명해 주실수 없으신지요?
예를 들어서...
A : 0 ~ 119
B : 120 ~ 239
C : 240 ~ 359
각 구간이 이렇다고 가정했을때 x가 어떤 구간에 속하는지는 요런 구문으로 알 수 있겠지요.
groups = ['A', 'B', 'C']
group = groups[x / 120]
무슨 말씀이신지 잘
무슨 말씀이신지 잘 알겠습니다.
감사드립니다.
for(i='A';i<'D';i++)
for(i='A';i<'D';i++) find[i]=max[i]-min[i] >= 200;
답변
답변 감사드립니다.
근데, for문을 돌리는 것도 if~else처럼 조건이 맞는 것을 iteration을 통해 찾는 것이기 때문에 차이가 별로 없을 것 같은 생각이 듭니다만, 제가 잘못 알고 있다면 지적해 주십시오.
감사합니다.
구체적으로 기존
구체적으로 기존 작성된프로그램이 어떤지 말씀안하셔서 알수 없으나..
보통은 for문이 비효율적이다고 생각하실필요는 없을겁니다.
더좋은답변을 얻으려면 질문이좀더 구체적일 필요가 있겠네요..
수천수만개정도로는 속도지연을 느끼진 못하실겁니다.
차라리 님이기존에 어떻게 if~else 를 통해 구현했느냐를 보여준다면, 아마 쉽게 원하시는 답변을 얻을수 있을겁니다.
감사합니다. 사실은
감사합니다.
사실은 O(1) 검색을 구현하고 있어서요.
사실 몇 천개 더 검색 더 한다고 해서 속도차이가 없는 것은 알고 있지만, for나 if else를 쓰면 조건을 검색한 후 답을 찾는 것이니 O(1)이 안 될 것 같아 드린 질문이었습니다.
아무튼 진심으로 감사드립니다.
님의 질문자체로볼때
님의 질문자체로볼때 정렬이없는가정하에서 생각해본다면..O(1) 은 구현되지 않습니다.
O(n) 정도 될겁니다.
또한 선정렬을 가정한다하더라도 O(1) 역시 불가한일입니다.
그게하능하면.. 여테 수많은 DB 들이.. 수억~수십억 하는장비에서 돌고 있지 않겠죠?
xxx[0..119] =
xxx[0..119] = A;
xxx[120..249] = B;
xxx[250..359] = C;
ans = xxx[n]; (0<=n<360)
blue+gene /bluegene.mireene.com/
blue+gene /bluegene.mireene.com/
답글
답글 감사드립니다.
배열을 쓰는 것은 정말 좋은 생각인 듯 합니다.
그런데, 249.7같은 실수를 다루는 경우에는 이 방법을 쓸 수가 없을 것 같은데요, 그런 경우에는 어떻게 하는 것이 좋을까요?
예를 들어,
A: 0.0 <= x < 132.3
B: 132.3 <= x < 236.5
c: 236.5 <= x < 360.0
같은 경우에요.
죄송합니다. 진작에 이렇게 질문을 드렸어야 하는데요.
미리 감사드립니다.
정수화 시켜서
정수화 시켜서 사용할 수도 있겠네요 :)
*= 10
/= 10
(범위체크시에만 *10 한 값을 사용해도 되겠구요)
ㅎㅎㅎㅎ~
blue+gene /bluegene.mireene.com/
blue+gene /bluegene.mireene.com/
아.. 네
아.. 네 그렇군요.
메모리를 좀 더 잡아먹긴 하겠지만, 속도 측면에서는 가장 빠르겠네요.
감사드립니다.
댓글 달기