'알고리즘'에 해당되는 글 2건

  1. 2021.07.28 [파이썬] 피타고라스 삼조 코딩
  2. 2015.01.19 [석사 논문 #5] 실험 순서정리

코딩은 하는 것 같은데, 아직 비효율적인 코딩이 나오는 것 같다.

숫자가 커질수록 연산과정이 많아져서 '이거 루프 도는 건가?'라고 생각할때 즈음 결과값이 나오는 것을 보았다.

그렇다면 어떻게 개선해야하는 것인가?

 - 알고리즘을 생각하고 개선 포인트를 찾자

 - for문이 3번 들어가기 때문에 for문 번수 * for문 번수 * for문 번수 이기 때문에 for문을 1개만 줄여도 '마지막 for문 번수'만큼을 안 곱해도 된다. 

 

[피타고라스 삼조 코딩 - 비효율적]

for a in range(1, 400):
    a2 = a * a
    for b in range(1, 400):
        b2 = b * b
        for c in range(1, 400):
            c2 = c * c
            if a2 + b2 == c2:
                if a + b+ c == 400:
                    #print(a, b, c)
                    print(a*b*c)

 

[피타고라스 삼조 코딩 - 효율적으로 개선]

 - for문을 1개 없애서 결과값 속도가 훨씬 빨라졌다.

 'c = 400 - a - b'와 같이 표현할 수 있다는 것을 배웠다.

for a in range(1, 400):
    for b in range(1, 400):
        c = 400 - a - b
        if a*a + b*b == c*c:
            if a + b + c == 400 and a < b < c:
                print(a, b, c)
                print(a*b*c)

** 이 문제는 a + b + c 가 400이면서 피타고라스 삼조를 만족시키는 샘플 문제에 대한 코딩이다.

 

Posted by 유영훈
,

​​

안녕하세요 

유영훈입니다.

 

이번 포스팅부터는

제가 주제로 하는 '주변 환경을 고려한 Wi-Fi 핑거프린팅 기반 실내 측위 시스템'을 위한

실험 순서에 대해서 조금씩 다루어 보려고 합니다.

 

이전 포스팅까지는 조금은 정리가 된 데이터들을 올렸지만,

이번부터는 아직 정리가 안된 것이기 때문에 여러분들께서는 '참고'만 해주셨으면 좋겠습니다.

 

저의 실험의 중점은 바로

'주변 환경을 고려'가 되겠습니다.

 

주변 환경이란

 1. 창문, 문의 여닫일 때(재질 및 두께 판단)

     → 각각의 재질과 두께가 다르겠지만, 어차피 그 좌표에서 오차범위를 정하는 것이니

         극복이 가능할 것으로 판단됩니다.

 2. 디바이스와 AP 사이에서 사람의 움직임(0~2명, 3~5명, 6~9명)

     → 사람의 적고 많음에 따라 디바이스와 AP간의 RSS가 달라지겠지만,

         이 또한 오차범위를 판단한다면 극복이 가능할 것 같습니다.

 3. AP의 변화(추가 및 삭제, 위치 변경 등)

     → 추가 : 앞의 포스팅에서 말씀드린 것처럼, 애초에 DB구축 단계에서 포함이 되지 않으므로

                  본 논문에서는 무시하는 것으로.

         삭제 및 위치 변경 : 이 부분이 저의 핵심 논제가 아닐까 싶습니다.

                                    핑거프린팅 방식에서 DB구축은 시간적, 비용적인 소모가 큰 작업인데

                                    AP의 변화로 인해서 DB를 갱신한다면 이또한 큰 소모임이 분명합니다.

                                    그렇기 때문에, DB를 갱신하기보다는 이를 어떠한 방법으로 대처하는지가

                                    중요한데, 이를 조금 뒤에서 집중적으로 다루어 보겠습니다.

 

이렇게 크게 3가지로 나눌 수 있습니다.

 

그래서 저는 앞으로 실험을 이 위의 3가지 경우를 케이스 바이 케이스식으로

접근을 해서 각각 RSS의 오차범위를 판단하면서 'DB구축 단계'를 진행하려고 합니다.

그 후에, 위 3가지 경우를 복합적으로 판단을 하여서 알고리즘 순서를 정하고,

핑거프린팅에서 2단계인 '위치 추정 단계'는 현재 좌표에서 AP간의 RSS를 측정하고

DB와 비교만 하면 크게 문제가 되지 않을 것이라 판단됩니다.

그렇기 때문에, 1단계인 'DB구축 단계'를 중점적으로 진행을 해보겠습니다.

 

실험 순서.

 1. 창문, 문의 여닫일 때(재질 및 두께 판단)

     - 실험 장소에 상관없이, 연구실, 도서관, 가정집.. 등 다양한 재질과 두께를 통해서 테스트를

       통해서 특성별로 살펴보고, 필드 테스트 장소에 맞는 결과를 알아보는 것으로.

 2. 디바이스와 AP 사이에서 사람의 움직임(0~2명, 3~5명, 6~9명)

     - 한 공간 안에서 진행하는 것이므로, 테스트 장소가 상관 없을 것으로 판단 됨.

       그렇기 때문에, AP의 배열만 잘 판단을 해서 실험을 진행한다면 어느장소에서도 사용가능하리라

       판단 됨.

 3. AP의 변화(추가 및 삭제, 위치 변경 등)

     - 추가 : 본 논문에서 무시

     - 삭제 : 보통 핑거프린팅 방식은 AP 3개를 활용해서 정말 깨끗하게 나온다면 현실적으로

                10m정도의 측위를 보인다고 합니다. 그런데 여기서 AP가 1개라도 삭제가 된다면

                구축한 DB에서 측위를 할 수 없기 때문에, 5개의 AP로 DB를 구축할 것입니다.

                그리고, 요즘에는 백화점이나 도서관 등 공공장소에서 스마트폰으로 와이파이를 켜면

                8개 이상 AP가 잡히는 것을 종종 볼 수 있습니다. 그래서 좌표마다 AP를 무작위로

                선정하는 것이 아니라 해당 좌표에서 RSS가 가장 강한 AP 5개를 우선순위로 선정을 하고,

                그 순서대로 AP1, AP2,....AP5로 정한다음에 존재하는 AP 3개를 가장 적은 숫자를

                선정하여 핑거프린팅 방식의 2단계인 '위치 추정'을 하면 극복 할 수 있다고 봅니다.

      - 위치 변경 : 이 부분이 조금 애매한 부분이 될 수 있다고 생각합니다.

                        추가나 삭제같은 경우는 다른 AP를 보겠다. 라고 판단을 하면 되겠지만,

                        '위치 변경'이라 함은 DB에 구축된 AP에도 해당이 되고 실제로도 RSS가 있기때문에

                        2단계인 '위치 추정 단계'에서 혼란을 일을킬 수 있다고 생각됩니다.

                         그래서 이 부분은 아직 구체화가 안되었지만, 지금 생각해보았을 때는

                        우선 RSS가 강한 AP 3개를 선정하고, 위치 추정 단계를 진행하였을 때,

                        크게 2가지 경우로 나뉘어 질 것 같습니다.

                         1) 1개의 AP가 DB와 비교했을 때, 터무니 없이 다른 값을 가지고 있다.

                             → 해당 AP를 무시하고, 다음 순위의 AP를 선정해서 측위 진행.

                         2) 1개의 AP를 DB와 비교했지만, 다른 좌표에 있는 RSS와 비슷해서 잘못 측위 됨.

                             → 이때가 제일 고민인데.. 할 수 있다면 최근 좌표값을 비교해서 올바른

                                경로 및 진행방향인지 판단해서 다음 AP로 변경하여 2단계를 진행해야할지..

                                만약 그렇다면, 자동으로 측위를 설정해 놓고, 그 측위값 갱신의 주기를 선정

                                해야 할 것으로 생각됩니다.

    

 우선, '위치 변경'에 관해서는 조금 더 진행을 하면서 구체화 시켜야 해보겠습니다.

 

 

이렇게 실험이 진행이 된다면, 제가 생각하는 결과는

각 좌표별로 AP와의 RSS가 딱 숫자 값으로 선정되는 것이 아닌, 일정 정도의 오차범위가 선정이 되서

위 3가지 경우가 발생하더라도 '주변 환경이 고려'가 되어 와이파이 핑거프린팅 방식만을 활용해도

10m 정도의 비교적 정확한 측위가 될 것이라고 판단이 됩니다.

 이는 와이파이 핑거프린팅의 단점인 주변 환경에 따라 민감한 RSS를 보완하는 것으로,

다른 논문들과 다르게 이를 보완하기 위해 복합 측위가 아닌 단일 측위를 활용하는 것이

저의 Contribution Point가 될 것입니다.

 왜 복합 측위방법을 활용하지 않고, 단일 측위를 택하였는지 이유는 아래의 지난 포스팅을

참고해주시면 감사하겠습니다.

 

 

실험에서 DB구축 단계일 때, AP는 5개를 선택하니 AP는 6개 정도 필요할 것 같은데..

다음 포스팅에서는 실험 장소 및 장비, 어플리케이션에 대해서 구체적으로 알아보겠습니다.

 

감사합니다.

 

Posted by 유영훈
,