tuple 구현

#include <iostream>
#include <type_traits>
#include <typeinfo>
using namespace std;
template<typename … Types>
struct xtuple
{
    static constexpr int Size = 0;
};

template<typename T, typename … Types>
struct xtuple<T, Types …> : xtuple<Types …>
{
    T value;
    static constexpr int Size = xtuple<Types …>::Size + 1;
    xtuple() = default;
    xtuple(const T& t, Types … args) : value(t), xtuple<Types …>(args …) {}
};

template<int N, typename T> struct xtuple_get
{
};

template<typename T, typename … Types>
struct xtuple_get<0, xtuple<T, Types …>>
{
    using VT = T;
    using TT = xtuple<T, Types …>;
};

template<int N, typename T, typename … Types>
struct xtuple_get<N, xtuple<T, Types …>>
{
    using VT = typename xtuple_get<N – 1, xtuple<Types …>>::VT;
    using TT = typename xtuple_get<N – 1, xtuple<Types …>>::TT;
};

template<int N, typename T, typename … Types>
typename xtuple_get<N, xtuple<T, Types …>>::VT xget(xtuple<T, Types …>& xt)
{
    using TT = typename xtuple_get<N, xtuple<T, Types …>>::TT;
    return static_cast<TT&>(xt).value;
}

int main()
{
    int v0 = 10101;
    xtuple<int> a(1);
    xtuple<int, short, double> b(v0,2,3.4);
    cout << xget<0>(b) << endl;
    cout << xget<1>(b) << endl;
    cout << xget<2>(b) << endl;
}

연관분석(A priori)

역시 세미나 했던 자료.
세미나 꺼리로는 너무 짧아서 데이터 마이닝 내용을 좀 추가함.

http://ai-times.tistory.com

요 사이트 참고 많이함.

https://docs.google.com/Doc?docid=0AdIZm9eZ-W4bYWg5MmNjbno5eHdnXzgzOGJmZjQz&hl=ko

예전에 개인적으로 정리했던 자료

6231572504.pptx

 A priori

어떤 사건이 일어나는 것의 연관성을 분석하는 데이타 마이닝 알고리즘.

사건이 일어난 데이타를 기반으로 각 사건에 대한 발생빈도로 사건들관의 연관 관계, 패턴을 밝히기 위한 방법.

예를 들어 시리얼 구입하는 고객은 우유를 구입하는 경우가 많으며, 새벽에 아기 기저귀를 구입한 남성 고객은 맥주를 사는 경우가 많다. 라는 분석 결과를 돌출하는것에 도움을 주어 상품의 전시등에 사용이 가능하다.

해당 알고리즘은 일어날수 있는 사건의 모든 항목을 구성한뒤 일어난 사건에 해당 항목들이 포함되어있는지를 카운트 하는 식으로 구성이 가능하다.

하지만 구분가능한 사건의 개수가 커지면 모든 사건을 구성하는것 자체가 불가능해지므로 A priori를 이용하게 된다.

예를 들어 1000개의 물품을 파는 상점에서 연관분석을 하기 위해서 손님들이 사갈수 있는 모든 물품의 리스트를 구성한다면 2^1000 되어 버린다.

A priori는 사건하나 부터 시작하여 특정 값 이상의 확률을 갖는 데이타 만을 구성하여 사건을 하나더 포함하는 다음 단계로 진행해 감으로써 위의 문제를 해결 하였다.


기본 용어 정리

샘플데이타

항목 번호 데이타 리스트
1 {1, 3, 4}
2 {2, 3, 5}
3

{1, 2, 3, 5}

4 {2, 5}

지지도(suport)

어떤 규칙의 지지도가 10%라면 그 의미는 전체 트랙잭션 중에서 그 규칙을 따르고 있는 트랙잭션이 10%를 차지한다는 것을 의미한다.

예를 들어 위 샘플데이타에서 2번 사건과 3번 사건이 같이 일어나는 경우는 전체 데이타 4가지에서 2가지에 포함되어 있으므로 (2 -> 3) 규칙의 지지도 50%라고 한다.

신뢰도(confidence)

특정 규칙의 한가지 상황이 만족할때 나머지 상황이 만족하는 퍼센트를 의미한다.

위의 경우 2번 사건이 일어난 항목이 세가지이고 해당 항목들 중에서 3번 사건이 2번 일어났으므로 (2 -> 3) 규칙의 신뢰도는 66% 라고 한다.


수도코드

// DATA :  데이타베이스에 쌓여있는 모든 항목의 집합 

// Fk : 사이즈가 k인 빈도가 높은 항목 집합들

// Ck : 사이즈가 k인 후보 항목 집합들

F0 = {DATA를 각각의 독립된 항목으로 분리하여 구성.}

for (k=0; Fk != (0개 or 1개); k++)

{

        Ck+1 = Fk로 부터 만들어진 새로운 후보 빈도 항목 집합

        foreach t in DATA {

                t 의 각 항목들이 중 Ck+1의 항목이 포함되어 있다면 카운터를 증가.

        }

       

        Fk+1 = Ck+1 에 들어있는 후보들 중에서 최소 지지도 이상을 갖는 것들.

}


각 구매항목을 하나의 개별 항목화 시켜 C1의 지지도를 구하고 75%이상인 지지도인 항목을 모아 F1을 구성한다.
그리고 F1을 항목을 조합하여 C2를 구성하고 다시 데이타 베이스에서 C2를 스캔하여 각 항목의 지지도를 구하여 최소 지지도(75%) 이상인 항목을 모아 F2를 구성한다.
이제 F2는 항목집합이 1개 뿐이으로 알고리즘을 종료한도록 한다.

여기서는 최소지지도가 75%로 알고리즘이 실행되어 F2에서 하나의 결과만 나왔지만 최소지지도 50%로 돌린다면 F2는 3개 이상의 항목이 나오고 F3까지 알고리즘이 진행되었을 것이다.

mssql tinyint 범위

http://msdn.microsoft.com/en-us/library/ms187745.aspx


Exact-number data types that use integer data.

























Data type Range Storage

bigint


-2^63 (-9,223,372,036,854,775,808) to 2^63-1 (9,223,372,036,854,775,807)


8 Bytes


int


-2^31 (-2,147,483,648) to 2^31-1 (2,147,483,647)


4 Bytes


smallint


-2^15 (-32,768) to 2^15-1 (32,767)


2 Bytes


tinyint


0 to 255


1 Byte


아니 왜 tinyint 는 unsigned 인가효
그럴그면 그냥 byte 이런식으로 이름을 붙이던가

int는 왜 unsigned 없나효

unix에서 네트웍 트래픽을 손쉽게 체크하는 ‘nload’

   PKGINST:  SMCnload
      NAME:  nload
  CATEGORY:  application
      ARCH:  x86
   VERSION:  0.7.2
   BASEDIR:  /usr/local
    VENDOR:  Roland Riegel and Helder Correia
    PSTAMP:  Steve Christensen
  INSTDATE:  5월 15 2009 21:30
     EMAIL:  steve@smc.vnet.net
    STATUS:  설치 완료
     FILES:       15 installed pathnames
                   5 공유 경로 이름
                   6 디렉토리
                   1 실행 가능
                 441 블록이 사용됨 (추정치)


유닉스단에서 쉽게 트래픽량을 비교해 볼수 있는 툴.
nload [NIC name]
으로 쳐주면 됨.

아래와 같이 출력



Device bge1 [xxx.xxx.xxx.xxx] (1/1):
================================================================================
Incoming:

                                                       Curr: 0.57 kBit/s
                                                       Avg: 0.67 kBit/s
                                                       Min: 0.54 kBit/s
                                    .    .      .      Max: 1.19 MBit/s
                                    #||||#||||||#||||  Ttl: 3.54 GByte
Outgoing:


                                    .
                                    #
                                    #    .      |
                                    # ## #      #      Curr: 1.53 MBit/s
                                    #.## #      #.     Avg: 2.51 MBit/s
                                    #### ####  .##||   Min: 1.24 MBit/s
                                    #########||######  Max: 5.22 MBit/s
                                    #################  Ttl: 2.08 GByte