2014-03-03 7 views
0

숨겨진 마르코프 모델에 묶는 매개 변수은 본질적으로 계산을 줄이고 제약 조건을 적용하기 위해 HMM의 여러 논리 매개 변수를 몇 개의 물리적 매개 변수에 매핑합니다.숨겨진 마르코스 모델 - C++에서 매개 변수 구현

따라서 매개 변수 (상태, GMM, 평균 벡터, 공분산 행렬, 전환 행렬, 스트림 가중치 벡터, 지속 시간 매개 변수 벡터 등)가 HMM을 나타내는 개체의 필드 인 경우이 매개 변수는 실제 사본이 거의 없습니다. 예를 들어, HMM 세트의 임의의 두 상태는 동일한 출력 확률 분포를 가질 수있다.

HMM의 구문 표현과 매개 변수를 묶는 매개 변수가 필요하며 구문 분석을 통해 HMM 개체를 구성해야합니다.

가능한 경우 C++ 언어의 기능을 사용하여이 매개 변수를 묶는 멋지고 우아한 방법은 무엇입니까 ?

편집

원시 포인터는 확실히 옵션이 아니다. shared_ptr 같은 C++ 포인터 유형을 찾고 있습니다. 그러나 가능한 경우이를 피하고 싶습니다. 또한 C++ 참조가 기능을 제한하는 것으로 보입니다.

당신은 매개 변수로 핸들의 어떤 종류를 사용할 수 있습니다

답변

0

, 즉 :

#include <cstdio> 
#include <boost/math/distributions/uniform.hpp> 

template< class T> 
class Handle { 
    T* rep_; 
    int* pcount_; 
    public: 
     T* operator->() { return rep_;} 
     Handle(T* rep) : rep_(rep), pcount_(new int(1)) {} 
     Handle(const Handle& r) : rep_(r.rep_), pcount_(r.pcount_) { 
      (*pcount_)++; 
     } 
     Handle& operator=(const Handle* r) { 
      if (rep_ == r->rep_) return *this; 
      if (--(*pcount_) == 0) { 
       delete rep_; 
       delete pcount_; 
      } 
      rep_ = r.rep_; 
      pcount_ = r.pcount_; 
      (*pcount_)++; 
      return *this; 
     } 
     ~Handle() { 
      if (--(*pcount_) == 0) { 
       delete rep_; 
       delete pcount_; 
       printf("~Handle()"); 
      } 
     } 
}; 

이러한 핸들이 자유롭게 통과 할 수 있고 모두가 하나의 표현을 공유 할 수

void f1(Handle<boost::math::uniform_distribution<int> > b) { 
    Handle<boost::math::uniform_distribution<int> > a = b; 
} 

Handle<boost::math::uniform_distribution<int> > f2() { 
    Handle<boost::math::uniform_distribution<int> > h( 
            new boost::math::uniform_distribution<int>); 
    return h; 
} 

/* 
* 
*/ 
int main(int argc, char** argv) { 

    Handle<boost::math::uniform_distribution<int> > h = f2(); 
    f1(h); 
    Handle<boost::math::uniform_distribution<int> > k = h; 
    return 0; 
} 

~ 손잡이를()

실행 성공 (총 시간 : 62ms)

+0

답변 해 주셔서 감사합니다! 포인터와 참조에 대한 몇 가지 요점을 추가했습니다. 이 상황에서 핸들이 더 나은 것이 사실입니까? 그렇다면 왜? – Bruce

+0

@ 브루스 그것은 당신의 필요, 당신의 기술 및 더 많은 것에 엄격하게 의존합니다. 핸들은 확실히 안전하고 사용하기 쉽고 수동 메모리 관리 부담을 덜어 주며 메모리 누수를 방지합니다. 또한 필요에 따라 처리 기능에 더 많은 기능을 추가 할 수 있습니다. 카운트 사용량, 현재 액세스 횟수 등 – 4pie0

+0

@ 브루스 추가 질문이 있습니까? – 4pie0