11/29/2016

Google Apps Script

1. Google Apps Script 관련사항 

구글에서 제공하는 datasheet와 document 관련된 apps에 관련 script가 존재하며,
본인은 datasheet를 가지고 간단한 script가 간단히 필요했기에 이를 가지고  TEST 한 결과 쉽게 작성가능했다.

다른 Apps도 쉽게 가능할 것 같으며, 복잡한 Apps은  Javascript를 전문적으로하는 Web 기술이 있어야 할것으로 생각된다.
하지만 구글에서 Manual을 제공을 하고 있어 , 이를 따라하면 누구나 쉽게 작성가능하다.
다만 한글 Manual 지원이 안되어서 문제일 뿐이다.


손쉽게 영어 단어 check script를 만들기 위해서 이것을 시작했지만, 별로 도움이 안되고
그냥 손으로 쓰는 것이 가장 도움이 되는 것 같다.

2. Datasheet Apps Script 

본인의 Gdrive에 가서 Datasheet 만들거나, 가진것을 가지고 TEST 해보자.
  1. open Google Datasheet 
  2. Tools > Script editor  or 도구->스크립터 편집기 실행 
  3. Test Function을 만들어보자. 
  4. Project를 저장하고, 권한을 설정하고 실행을 해보자. 
  5. 스크립터 편집기에서 보기->로그 보면 실행된 결과를 확인 가능하다. 
아래의 화면은 Script 편집기를 통해서 새로만든 프로젝트이다.
이곳에서 보기->로그를 통해 간단히 확인 가능하다.


// Google의 example을 간단히 TEST 

function logProductInfo() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var data = sheet.getDataRange().getValues();
  for (var i = 0; i < data.length; i++) {
    Logger.log('Product name: ' + data[i][0]);
    Logger.log('Product number: ' + data[i][1]);
  }
}







3. Datasheet 에 App Script TEST  

3.1 Basic Datasheet Apps Script  


아래와 같이 메세지를 알려주는 간단한 함수를 만들어 보자,
alert message로 변경을 하고 datasheet 값을 읽어 매번 알려주는 것이다.
위의 log를 alert로 변경을 하고, 너무 길면 적당히 알려주도록 15까지만 하자.
아래는 Javascript와 동일하다.

function logProductInfo() {
  
  var sheet = SpreadsheetApp.getActiveSheet();
  var data = sheet.getDataRange().getValues();
  var ui = SpreadsheetApp.getUi();
  var numfinsh=15;

  if(data.length < 15)
       numfinsh = data.length;
    
  for (var i = 0; i < numfinsh; i++) {
   
    var msg = "Test2 Number:" + i + " /" + data.length + "\n\n";
    
    msg += data[0][2] + ":" + data[i][2] + "\n";
    msg += data[0][3] + ":" + data[i][3] + "\n\n";
    msg += data[0][4] + ":"+ data[i][4] + "\n";         
    
    ui.alert(msg);                  

}
    
}



  • TEST 하는 방법
Google Driver에 스프레드시트 보기 및 관리 허가를 받는다.
실행버튼을 누르면 실행이 된다.

* 만약동작이 되지 않는다면 프로젝트에서 문서를 찾아서 직접 넣어 추가해보자.
  게시->부가기능으로 테스트

  • 실제적용하는 방법
트리거를 사용하는 방식, 즉 이벤트가 발생할때 함수를 호출하도록 설정.
위와 같이 하면 문서의 이벤트 발생시마다 함수가 호출이되어 적용이 됨


3.2 개선된 Datasheet Apps Script  

트리거로 파일 오픈할때 onOpen을 적용하여,  "My Menu" 만들어 함수를 실행하도록하자.
원하지 않는다면, 멈추는 기능을 추가하자.
물론 아래도 버그가 있다,
mySecondFunction이나, myThirdFunction을 구현을 안했다.
추후 TEST를 위해서 더 유지를 했다.


function onOpen(e) {
   SpreadsheetApp.getUi()
       .createMenu('My Menu')
       .addItem('My menu item', 'my1stFunction')
       .addSeparator()
       .addSubMenu(SpreadsheetApp.getUi().createMenu('My sub-menu')
           .addItem('One sub-menu item', 'mySecondFunction')
           .addItem('Another sub-menu item', 'myThirdFunction'))
       .addToUi();
}
 

function my1stFunction() {
  
  var sheet = SpreadsheetApp.getActiveSheet();
  var data = sheet.getDataRange().getValues();
  var ui = SpreadsheetApp.getUi();
    
  for (var i = 0; i < data.length; i++) {
   
    var msg = "Test Number:" + i + " /" + data.length + "\n\n";
    
    msg += data[0][2] + ":" + data[i][2] + "\n";
    msg += data[0][3] + ":" + data[i][3] + "\n\n";
    msg += data[0][4] + ":"+ data[i][4] + "\n";         
    
    var result = ui.alert(msg,ui.ButtonSet.OK_CANCEL);   
    
    if (result == ui.Button.CANCEL)
          break;        
  }    
}



실제로 적용 해보면, 어렵지 않으며, 약간의 시간이 있다면, 메뉴얼 읽는 시간과
소스 가지고 와서 붙히기 능력과 있으면 된다. ㅋㅋㅋ

메뉴를 바꾸고 싶다면 아래의 사이트에서 본인이 원하는 메뉴로 바꿔보고 테스트 해보자.
어렵지 않다.


4. Apps Script 관련사항  

프로젝트를 보면 다양한 기능을 제공을 하고 있으며, 프로젝트를 동시에 여러개를 운영이 가능하다.
아래는 간단히 기능만 소개한다.
  • 게시->배포기능  
  1. 웹앱 배포   : 크롬 웹 방식으로 하는 것 같음 
  2. API 실행가능으로 배포  :  Google API에 추가하는 식으로 하는 것 같음. 
  3. 스프레드 부가기능으로 배포:  다른 사람도 나의 Script을 사용가능한 것 같음.  
    API 배포방식하면, Gdrive 공유문서에, 배포된 API 연결하여 동작이 가능할 것 같다.
    그러면 HTML안에서 Javacript를 넣어 이를 다 Control이 가능할 것 같다.
    위 사항들은 어디까지나 개인적인 생각일뿐이다.
    아직 배포를 못해봤으며, Key 값이 없다.

    Key가 존재하면, 리소스->라이브러리 도 이용가능하고 다양하게 작성이 가능할 거 같다.
  • 프로젝트 기본정보확인 (파일->속성) 
     프로젝트 관련된 Script ID와 Key 정보가 있으며, 프로젝트 관련 정보가 있다.
     저번에 Google API를 사용하려고 Key를 얻을려고 했더니, $100까지만 무료이고,
     이후 유료인걸로 기억하고 있어, 추후 더 자세한 사항을 읽어봐야겠다.
     나중에 필요하다면 회사차원에서 해보겠다.


  • Google API 적용   
      프로젝트->리소스->고급 Google 서비스 

      다른 Google API를 이곳에서도 적용이 가능한 것 같다.
      이것을 하려면, Key값을 얻어야 할것 같다.
      위의 파일->속성에서 보면 자신이 Key를 가지고 있는지 확인 가능하다.


참고사항 
  • Dialogs Script 
   Dialog Box (alert , prompt box, custom box)
   https://developers.google.com/apps-script/guides/dialogs
   https://developers.google.com/apps-script/reference/base/button-set

  • Custom Menu 
   Google Apps에서 본인이 원하는 Menu를 만들수 있다
   https://developers.google.com/apps-script/guides/menus

  • Datasheet Apps Script Manual
   DataSheet에 관련된 Apps script
   https://developers.google.com/apps-script/reference/spreadsheet/sheet
   https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet-app#getUi()

11/24/2016

Laptop Upgrade 계획

1. My Laptop 기본사양 확인

  • Laptop 기본사양 
  1. 제조사 : HP 
  2. 모델명:  Pavilion DV6 6124tx
  3. 제품번호 : QB388PA#AB1
    확인방법
        HP Support Assistant 사용

  • 세부사양 
    OS: Windows 7 Home Premium K 64-bit Service Pack 1     
         CD 미제공 및 HDD의 Recovery로 복구
  1. CPU:  Intel(R) Core(TM) i5-2410M CPU @ 2.30GHz
  2. Memory: 8GB
  3. Graphic Device1: Mobile Intel(R) HD Graphics (1920x1080)
  4. Graphic Device2: Radeon (TM) HD 6770M      (1920x1080)
  5. HDD: TOSHIBA MK1059GSM - 931.51 GB       (SATA2 Type)
  6. ODD: DVD A  DS8A5LH                              (Slim SATA)

  • Laptop 관련정보 
    아래의 정보를 보면, 현재 Laptop에 비해서도 성능이 많이 떨어지지 않는다.
    다만 SSD와 CPU 성능 약간 아쉬울 뿐이다.

    http://www.bodnara.co.kr/bbs/article.html?num=85730
    http://www.noteforum.co.kr/news/?nm=14947

  • HDD Interface 
    현재 HDD가 SATA2 인 3GBps를 사용하고 있으며
    AHCI가 SATA3도 지원가능하다고 한다.

    https://www.cnet.com/products/toshiba-mk1059gsm-hard-drive-1-tb-sata-3gb-s-hdd2k11/specs/

  • ODD Interface
    SATA Interace이며, Multibay or Mutiboost를 이용하여 추후 HDD를 이곳에 추가.

    http://www.ebay.com/itm/HP-DS-8A5LH-DVD-RW-Drive-Burner-Writer-SATA-LS-SM-DL-Notebook-Laptop-Internal-/181122052833

    내 Laptop 은 구입한지 벌써 5년이 넘었고, 100만원 정도에 구입한 것 같다.
    그 당시 가성비를 생각하면 , 상당히 잘 구입한 Laptop이다.

  • HW Upgrade 계획 
  1.  SATA (1GB HDD) -> SATA2 or 3 (250GB)   MLC Type로 변경 
  2.  사용중 1GB HDD를 ODD를 제거하고 멀티부스트 를 이용하여 추가

  • Upgrade 시 문제사항 
  1. HDD->SDD로 변경시 이를 복구하는 방법
  2. HP Recovery 기능 동작  (기능포기)
  3. Norton Ghost or Arcro Image 사용할 예정 ( 기능포기)

  HP Recovery를 이용하여 SSD에 기본복구
  http://soul0.tistory.com/249   

  • HP의 공식입장
  -요약 복구디스크로 HDD->SSD로 변경시  새 Window 필요
  http://h30491.www3.hp.com/t5/forums/forumtopicpage/board-id/laptop/thread-id/4473
  http://h30491.www3.hp.com/t5/forums/forumtopicpage/board-id/laptop/thread-id/2848

  • 고스트 할 경우 문제 발생 
  http://www.x86osx.com/bbs/view.php?id=osxqna&page=807&sn1=&divpage=7&sn=off&ss=on&sc=on&select_arrange=headnum&desc=desc&no=41764


2. Laptop Upgrade 하기전 확인사항 


  • 기본성능확인 
       제어판 -> 제어판 검색 ( 성능 정보 검색)

  1. 아래 그림에서 (주 하드디스크)  체크 



  • HDD -> SSD 교체시 확인 사항 
  1. SATA Controller 가 SATA2 와 3 지원가능여부 
  2. 구입할 SSD 가격 및 성능고려  (SATA2 or SATA3 지원여부)
  3. 현재 Window System 복구 or 복원 방법 
 
  • ODD -> HDD 교체 시 확인 사항 
  1. 멀티부스트(Multiboost) Interface 확인 (E-IDE or SATA 
  2. 멀티부스트(Multiboost) 사이즈 확인  (12.7mm 확인)

    *멀티부스트(Multiboost) : ODD 즉 DVD 를 제거하고, HDD를 넣어 ODD Interface 연결하는 장치
    http://rapwing.tistory.com/entry/%EC%9D%B4%EA%B2%83%EC%9D%B4-%EB%B0%94%EB%A1%9C-%EB%A9%80%ED%8B%B0%EB%B6%80%EC%8A%A4%ED%8A%B8%EC%9D%98-%EC%8B%9C%EC%9E%91%EA%B3%BC-%EB%81%9D


    아래사이트에서  동일모델 교체 성능확인
    http://dsct1472.tistory.com/512
    http://ceoparkjh.tistory.com/entry/HP-%EB%85%B8%ED%8A%B8%EB%B6%81-dv66124tx-RAM-SSD-%EC%9E%A5%EC%B0%A9


3.  구입물품 결정 

  • SSD 구입 (MLC type, 256 or 250 or 512 ) , 마이크론 Crucial MX200
  • Multiboost 12.7mm SATA to SATA Type 
  • 베젤 구입 (옵션) 
  • USB SATA Connector (옵션)
  • USB 32G (복구용)

  http://itempage3.auction.co.kr/DetailView.aspx?ItemNo=A560306033
  http://66.232.142.245/front/productlist_morning.php?code=073004009000&listnum=&sort=&block=&gotopage=

4.   교체 작업 전 

  • HP Setup Manager 실행  

     백업설정 -> 복구디스크 만들기->HP Recovery Manager 실행

  1. 복구미디어 만들기 (복구 미디어 오직한번)
  2. USB 플래시 (13GB) or DVD (4개) or DVDDL (2개)  중 선택
  3. 복구디스크 만들기 (본인 USB) 

    설사 제대로 동작이 되지 않더라도, 나의 HDD를 다시 복구하기 위해서라도 필요함.
 
    *주의
    이 작업은 한번밖에 기회를 주지 않기 때문에, 이 저장매체를 잘보관해야함

  • HP Laptop 부팅시 
  1. ESC Key :  BIOS 설정 및 Laptop 상태 보기 
  2. F11 Key :  HP Recovery 

4.  교체방법

  • 배터리 제거 및 교체 동영상
    https://www.youtube.com/watch?v=ND6GXwhuMOY

5.  가성비 

가성비를 따져보니, 교체비용이나, Laptop을 비슷한것을 사나 비슷한 것 같으며, 삽질만하고 별 소득이 없는 것이라고 판단이 된다

11/22/2016

DevOps 관련링크 (수정중)

Cloud를 관련내용을 보다가 요즘 하도 DevOps 라는 용어가 많아 관련내용을 정확히
알기 위해 알아 보았다.

  • DevOps : Development와 Operation의 합성어라고 한다. 

처음 Filesystem인 줄 알았는데, 개발 방법론 및 문화이며 아래에서 자세한 내용들을
알수가 있었다.

  https://en.wikipedia.org/wiki/DevOps

  http://bcho.tistory.com/815
  http://bcho.tistory.com/817

11/20/2016

한국 IT 반도체 관련분석

최근 외국계 반도체 회사 고용 및 관련부분이 궁금해서 관련 뉴스를 정리하고
관련된 부분을 정리해가려고 한다.

반도체 외국계회사라고 해서 다 어려운 것은 아니지만 대체적으로 거의 어렵다.
근본적인 원인은 중국이겠지만, 한국의 제조사 기업들이 많이 힘들기 때문이다.


  • 핸드폰관련부분

주제조사가 LG/SAMSUNG/팬택 이겠지만, 거의 LG와 Samsung이겠지만,
관련 외국계 반도체 회사 사업부가 축소되고  구조조정 되어가지고 있다.
현재 다시 이부분은 자동차쪽으로 다시 쏠리는 편이지만 아직도 불안하다


  • 영상업체 제조사 

대표적으로 IP Camera/DVR/NVR 및 기타 다른 영상장치들은 중국기업때문에 점점
매출이 하락으로 가고 있으며 이부분은 어떻게 할수가 없는것 같다.
중국의 hisilicon 칩업체의 등장에 중국 영상제조사로 인하여 이 제조사들은 고급전략이 아닌 이상은 힘이든것 같다.


1. 일반적인 반도체 기사 모음 


  • 2017 03월 기사 
한국 반도체 회사들의 매출 및 회사들 10곳 중 7곳이 1년사이에 30%로가 영업이익이 많이 떨어졌다고 하며, 한국 시장철수도 많이 일어나고 있다고 한다.

아래의 기사를 보면 15개 업체의 매출과 영업이익을 확인가능하지만, 기사를 보면 영업이익이 상당히 많이 늘어난곳도 종종 있지만,
최근 영업이익과 매출은 완벽히 믿을수 없다.

  http://blog.siliconroad.com/bbs/board.php?bo_table=sub1_2&wr_id=876&sca=%EB%B0%98%EB%8F%84%EC%B2%B4&page=2
  http://www.etnews.com/20170306000301


  • 2016년 10월 관련기사 

최근 많은 외국계 반도체 회사의 인수합병으로 사업부 축소로 인하여 많은 엔지니어들의 고용이 불안하며,
재 취업이 힘들다는 기사이다


  1. Avago의 Broadcom 인수
  2. NXP의 Freescale 인수 
  3. Qualcomm CSR 인수

  http://www.etnews.com/20161027000335
  http://blog.siliconroad.com/bbs/board.php?bo_table=sub1_2&wr_id=465&sca=%EB%B0%98%EB%8F%84%EC%B2%B4&page=1
  https://www.qualcomm.com/news/releases/2015/08/13/qualcomm-completes-24-billion-acquisition-csr



  • 2015년 9월 관련기사 


  1.   Marvell의 모바일사업부 축소 및 구조조정 

  http://kotrasv.org/board/bbs/board.php?bo_table=i_news&wr_id=741&page=5 
  http://www.fnnews.com/news/201509271402493382


11/08/2016

adb tools 설치 및 android 해상도 변경방법

1. Android Tools Install 

 https://developer.android.com/studio/index.html?hl=ko

 adb tool 만 사용한다면, android studio는 별도로 필요가 없으며,
아래의 설치 프로그램만 설치

 명령줄 도구만 다운로드
  • installer_r24.4.1-windows.exe  : adb , fastboot 포함 




  • 설치후 확인 

 C:\Program Files (x86)\Android\android-sdk\platform-tools 

2. Android 에서 해상도 변경 

해상도 변경 목적은 Samsung의 Smart view에서 화면이 너무 작게 나와서,
해상도를 변경통해 TV에서 전체화면으로 보려고 했으나 실패

아마도, Smart View Device에서 지원이 되어야 하는 것 같다.


  1. window의 cmd 실행 
  2. adb shell 실행  ( PATH가 설정이 되지 않았다면, 위 디렉토리 찾아가서 실행)
  3. echo %PATH%  (본인 PATH 확인방법) 

주의사항.

  • usb driver 설치 
  • phone이 usb 연결이 되어 있어야 함. 
  • 개발자모드로 전환하여, USB Debugging 허용 

2.1 adb shell 

window manager 인것 같고, density 는 dpi의 정보 인것 같으며,  dot per inch 이다.
overscan은 margin인 것 같은데, 추후 더 살펴보고 정리해야하겠다.


$ wm density 480
$ wm size 720x1280

원상태로 복귀

$ wm size reset
$ wm density reset


 각종 해상도 참조
 https://ko.wikipedia.org/wiki/%ED%95%B4%EC%83%81%EB%8F%84

 상위 명령어 참조
 http://android.stackexchange.com/questions/115484/resize-screen-to-display-only-on-working-part-of-semi-functional-touchscreen

 상위 명령어 참조
 http://dsct1472.tistory.com/565
 http://threeword.com/147

11/01/2016

Heap 과 Heap sort 와 Priority Queue

1. Heap 이란? 

  • 기본구조
Heap은 일종의 이진트리 구조로 구성이 되며 (Binary Tree)
여기서 간단한 한가지 특징 존재한다.

      항상 Parent Node 와 Child Node의 대소관계가 분명해야하는 것이다. 

그래서, 아래와 같이 두가지 종류의 Heap Tree가 만들어 질수 있다.
  1. top-heavy tree          :  Parent Node > Child Node( Left, Right) 
  2. bottom-heavy tree     :  Parent Node < Child Node( Left, Right) 
    이곳에서는 Left Node와 Right Node의 대소관계는 중요하지 않으며, 
    오직  Parent Node와 Child Node의 대소관계만 따진다. 


  • 기본적인 Heap이 완성된 경우의 구조 
  1. top node는 top-heavy tree의 경우  가장 큰 값  
  2. top node는 bottom-heavy tree의 경우 가장 작은 값
  3. 위에서 언급했듯이, 그 다음 작은 값은 child 중 한 Node (Left or Right)

  • Heap의 기본특성
  1. Parent node와 Child node의 대소관계가 분명하다.
  2. Left node와 Right node의 대소관계의 불문명하다.
  3. 오직 Parent와 Child node의 구성만 알수 있다. 
  4. heap은 기본적으로 왼쪽 평형트리 구조를 가지고 있으며, 이는 중요하다.

  • 상위 4번 특성 (왼쪽 평형트리 구조) 로 아래의 추가적인 특성이존재 
  1. Node 추가 할 경우,Child node가 추가되는 방향은 항상 왼쪽에서 오른쪽. 
  2. Node 삭제 or 추가된 경우 Child node가 한개가 될 경우 left node 우선순위가 있음
  3. Binary 탐색을 한다면 BFS 방식

*BFS(Breadth-first search) 대표적인 이진 트리의 탐색 알고리즘으로 넓이 우선 순위이다. 
    
  • Timer complex  설명
    아래 설명에도 자세히 나와 듯이 기본적으로 Binary Tree 구조이며,
    시간의 복잡도는 Insert 할 경우는 Worst Case O(LogN)이다. 
  https://en.wikipedia.org/wiki/Binary_heap


1.2 Heap 기본구현 (Array 방식)
기본적으로 Array로 구현하는 것은 아래와 같으며, 아래와 같은 성질이 존재한다.
기본성질 Array Binary Tree 기본 성질 array를 0부터 사용할 경우 


  • Number Node

      Number of Node = 2^(i+1) -1 ,   N 은 Tree의  Level의 수


Array즉 배열을 이용하여 이진 트리를 구성해야하기 때문에 Array와 binary Tree의 성질
알아야한다.
  • Array로 Binary Tree 구현할 경우 기본성질  

  1. Left Node = 2i+1
  2. Right Node = 2i+2
  3. Parent Node = (i-1)/2  

  자세한 내용은 2.2 Data의 정적구현 참조
  http://ahyuo79.blogspot.com/2016/10/tree.html


  • top-heavy heap 구현방법 
  1. top-heavy heap는 top node는 가장 큰 값을 소유하고 있다. 
  2. Heap의 Length을 정확히 파악하여 last node의 parent와 child 대소 관계를 비교
  3. Child가 큰 경우에만 Parent와 Child 교환진행 
  4. 왼쪽 Parent로 이동가며  Top Node까지 진행하며 3번 반복 (방향 오른쪽 -> 왼쪽 ) 



  • Top-heavy heap Example 

   상위그림 기준으로 보면, Last Node 14이며 , Parent 6 여기서 3 Node를 비교 교환시작.
   Parent 6,5,4,3,2,1,0 비교와 교환 진행 하면 Top-heavy heap 구축된다.


  Heap 자료구조 관련내용
  http://opendatastructures.org/ods-java/10_1_BinaryHeap_Implicit_Bi.html
  https://ko.wikipedia.org/wiki/%ED%9E%99_(%EC%9E%90%EB%A3%8C_%EA%B5%AC%EC%A1%B0)
  https://en.wikipedia.org/wiki/Heap_(data_structure)


2.  Heap Sort

기본적으로 상위 Heap 구현이 된 후에, 이를 이용한 Sort 알고리즘이다.
방법은 간단하며, Heap 기본성질이 최대 or 최소 값을 추출하는 방법을 이용한다.

  • 구현방법 
  1. n 개의 노드를 가진 top-heavy heap 구조 구축 
  2. top-heavy heap는 top node는 가장 큰 값을 소유   
  3. top-node를 last node와 교환진행   (top-node 추출작업과 동일)    
  4. top-heavy heap를 재구축을 heap size를 1을 줄이고 진행한다. 
  • top-heavy heap 재구축 및 추출작업 
  1. top-node가 현재 작은값이기때문에 child 중 두번째로 큰 값을 찾아 교환 
  2. 원래 top-node의 값은 child (left or right) 되었기에 관련 Tree는 비교 및 교환진행  
  3. 2번을 반복하며 방향은 아래로 지속적으로 한쪽 방향으로만 비교 및 교환진행 ( O(logN)     
  아래의 예제들을 보면, heapify가 heap을 구성한다.
  https://ko.wikipedia.org/wiki/%ED%9E%99_%EC%A0%95%EB%A0%AC
  https://en.wikipedia.org/wiki/Heapsort

  다른 Heapsort 예제들
  http://thinkpro.tistory.com/72
  http://ehclub.co.kr/1552

3. Priority Queue

기본적으로 상위 Heap 구현이 된 후에, 이를 이용한 우선순위 Queue를 구현이 가능하다.
Heap sort 와 마찬가지로, Heap의 기본성질인 가장 큰 값 or 가장 작은 값을 이용하는 것이다.
Priority Queue 역시 Heap의 기본 성질을 원하는 것이기 때문에, Heap를 이용하여 쉽게
구현이 가능하다.

  • array 구현방법 (정적으로 구현방법)
  1. pqueue_init : n 개의 노드를 가진 상위 top-heavy heap 구성 
  2. pqueue_insert: 기존의 top-heavy heap 의 마지막 노드에 data 를 삽입 후 다시 heap화 한다.
  3. pqueue_extract: top node를 추출하고 size를 줄이고 다시 heap화 한다. 
  • 구현함수
  1. pqueue_init : 상위 heap 구성과 동일 
  2. pqueue_insert :  pqueue_init와 동일 
  3. pqueue_extract:  top-heavy 재구축과 동일 

  https://ko.wikipedia.org/wiki/%EC%9A%B0%EC%84%A0%EC%88%9C%EC%9C%84_%ED%81%90
  https://en.wikipedia.org/wiki/Priority_queue

  • Heap and Heap sort and Priority Queue 예제 
구글링하다가, 이해하기 쉬운 C source를 찾으려고 했으나, 찾을수 없어 wiki 기반으로,
이해가며, 그냥 내가 다시 구현했다.