반복문의 반복 횟수를 줄이는 코드 작성

반복문의 속도를 최적화하기 위한 방법중의 하나로 반복 횟수를 줄이는 것이 있습니다. 이에 대해서 제프 그린버그(Jeff Greenberg)가 제안한 내용이 있는데요. 처음 제안될때 작성된 샘플 코드가 C이지만 이를 JavaScript로 해석해 보았습니다. 먼저 개선해 나갈 반복문의 코드가 다음과 같습니다.

function task(arg) {
    var sum = 0;
    for (var i = 0; i < 10; i++) {
        sum += i;
    }
    return sum;
}

var start = +new Date();
var result = 0;
var repeatCounts = 9999999;

//========================================
for (var i = 0; i < repeatCounts; i++) {
    result += task(i);
}
//========================================

var end = +new Date();
var diff = end - start;
alert("result = " + result + ", " + diff + " msec");

최적화 대상이 되는 반복문은 13ㅡ17번입니다. 반복문 안에서 실해된 코드를 별도의 함수인 task로 뽑아놨습니다. task는 1부터 10까지의 합계를 구하는 간단한 연산을 수행하는 함수입니다. 반복문의 속도를 측정하기 위해서 반복문 앞뒤로 시간을 측정하고 있습니다. 이 반복문을 수행하였더니 제 타블릿PC에서는 8.6초가 나왔습니다. 이제 동일한 결과를 얻으면서도 반복 회수를 줄이는 방식으로 최적화를 한 코드는 다음과 같습니다. 위의 13ㅡ17번에 대한 반복 코드에 대한 변경된 부분만 언급하였습니다.

//========================================
var iters = Math.floor(repeatCounts / 10);
var startAt = repeatCounts % 10;
var i = 0;

do {
    switch (startAt) {
        case 0: result += task(i++);
        case 9: result += task(i++);
        case 8: result += task(i++);
        case 7: result += task(i++);
        case 6: result += task(i++);
        case 5: result += task(i++);
        case 4: result += task(i++);
        case 3: result += task(i++);
        case 2: result += task(i++);
        case 1: result += task(i++);
    }
    startAt = 0;
} while (iters--);
//====================================

한번의 반복으로 최대 10번의 반복을 대신하고 있습니다. switch 문을 보면 break문이 없다는 점을 유념해 해석해 보면 그 원리를 이해할 수 있습니다. 실행해 보면 소요되는 시간이 6.3초로 2.4초 단축된 것을 알 수 있습니다.

[GIS] 여러 개의 SHP 파일을 하나로 합쳐주는 툴 ㅡ MergeSHPFiles

속성이 동일한 SHP 파일들을 하나로 병합해 주는 툴입니다. 병합할때 저장할 속성을 선택할 수 있는 편의 기능을 제공합니다. UI는 아래와 같습니다.

사용자 삽입 이미지
각 UI에 대한 기능을 간단히 설명하면 다음과 같습니다.


  1. 병합할 SHP 파일을 추가합니다. 병합할 SHP 파일의 속성에 대한 필드 구조는 동일해야 합니다.
  2. 병합하기 위해 추가한 SHP 파일을 제거합니다.
  3. 병합할 SHP 파일에 대해서 저장할 속성 필드를 선택할 수 있는 리스트입니다.
  4. 병합할 SHP 파일의 리스트입니다.
  5. 병합되어질 결과 SHP 파일명입니다.
  6. 그림에서 빠졌군요 ㅡOㅡ;
  7. 병합할 SHP 파일을 지정합니다. 이미 존재하는 SHP 파일을 지정해서는 않됩니다.
  8. 병합을 실행합니다.
아래에 실행 파일과 소스를 함께 올립니다. 이 프로그램은 듀라맵을 이용하므로 먼저 듀라맵을 PC에 등록하셔야 합니다.

[GIS] 듀라맵을 이용한 폴리곤 자르기(Split) 데모

듀라맵을 이용한 공간 분석 시스템을 작년부터 진행하고 있었습니다. 1차 마무리를 하고 추가 요구사항이 생김으로써, 해당 요구사항을 반영하면서 해당 내용 중 필요한 일부 기능인 폴리곤 자르기에 대한 데모를 동영상으로 소개합니다.

사용자 삽입 이미지
데모시연 동영상

듀라맵은 작지만 GIS 엔진으로써 갖춰야할 전반적이고 기본적인 기능을 모두 갖추고 있습니다. 또한 이러한 GIS에 대한 기본 기능을 통해 보다 고도화된 고급기능을 PlugIn 형태로 확장할 수 있습니다.

[GIS] 도형을 단순화 시키는 툴 ㅡ Simplify-Xr

SHP파일을 구성하는 공간 도형을 단순화 시키는 툴입니다. 공간서버에 공간 데이터를 올릴때 서비스 속도를 개선하고 위해 공간데이터의 용량을 줄일 목적으로 만들었습니다.
 
사용자 삽입 이미지
Tolerance의 값을 조정하여 단순화의 정도를 지정할 수 있습니다. 위의 화면 예에서 입력한 SHP 파일의 원래 크기는 1.29MB였는데 Tolerance를 10으로 주어 단순화 함으로써 0.26MB로 줄였습니다.

이 툴은 듀라맵 3.9 버전을 사용합니다. 듀라맵 3.9는 다음 URL을 통해 다운로드 받을 수 있습니다.

http://www.gisdeveloper.co.kr/?page_id=3916