資源簡介
算法解決的問題:通過觀察序列來猜測背后最有可能的隱藏序列。viterbi譯碼算法是一種卷積碼的解碼算法。優(yōu)點不說了。缺點就是隨著約束長度的增加算法的復(fù)雜度增加很快。

代碼片段和文件信息
#include?“Viterbi.h“
#include?
#include
#define?ID_BOS?0
#define?ID_EOS?1
#define?MIN_VALUE?-2000000000
void?ViterbiNodeNet::GetBestPath()?{
/* ViterbiNode*?pVbBestNode?=?NULL;
for(int?i?=?0;i?<=?;i--)?{
}*/
}
void?ViterbiNodeNet::AllocBuff(const?int?iLenSen)?{
if(iLenSen?<=?0)?{
return?;
}
if(!m_pClassResult)?{
m_pClassResult?=?new?Result();
}
ClearNet();
m_pClassResult->Alloc(iLenSen?-?2);//?沒有?
m_vbNodeMap?=?new?ViterbiNode[iLenSen?*?MAX_UNIT_INDEX?+?1];
m_iWordCount?=?iLenSen;
}
bool?ViterbiNodeNet::InitVbNodeNet(?WordMap*?pWordMap)?{
m_iWordCount?=?pWordMap->GetColCount()?;
if(pWordMap?==?NULL?||?m_iWordCount?==?0)?{
return?false;
}
if(m_pClassResult)?{
m_pClassResult->Clear();
}
m_WordUnitList.clear();
AllocBuff(m_iWordCount?/?2?+?1?);?//?因為?只占了兩列,所以要?+?1
// fprintf(stderr“begin?InitVbNodeNet!\n“);
//m_iWordCount?=?pWordMap->clomn_len?;
for(int?i?=?0;?i? ClomnInfo*?pColInfo??=?(ClomnInfo*)(pWordMap->GetColInfo(i));
if(!pColInfo)?{
continue;
}
m_iRowSize[i]?=?pColInfo->GetWordNum();
for(int?j?=?0;?j? const?WordUnit*?pWordUnit?=?pColInfo->GetWordUnit(j);
if(!pWordUnit)?{
continue;
}
ViterbiNode*?pViterbiNode?=?GetViterbiNode(ij);
pViterbiNode->dScore?=?-2000000000;
pViterbiNode->iWordId?=?pWordUnit->word_id;
pViterbiNode->dFreq?=?pWordUnit->dFreq;
pViterbiNode->dRollBack?=?pWordUnit->dRollBack;
pViterbiNode->nodeTag?=?(NodeTag)pWordUnit->word_pos_type;
pViterbiNode->iWordLen?=?pWordUnit->word_len;
pViterbiNode->pUcsChar?=?pWordUnit->pUcsChar;
}
}?
// ?fprintf(stderr“end?InitVbNodeNet!\n“);
return?true;
}
int?ViterbiNodeNet::ForiPersonTag(const?RoleShiftDict*?pRoleShiftDictconst?RoleTagModel*?pRollMdl)?{
if(pRoleShiftDict?==?NULL?||?pRollMdl?==?NULL?||?m_pRecPerName?==?NULL)?{
return?-1;
}
// m_pRecPerName->SetRecogType(REG_FORI_NAME);
return?m_pForPerName->Mark(m_pClassResultpRoleShiftDictpRollMdl);
// return?m_pRecPerName->Mark(m_pClassResultpRoleShiftDictpRollMdl);
}
int?ViterbiNodeNet::CHSPersonTag(const?RoleShiftDict*?pRoleShiftDictconst?RoleTagModel*?pRollMdl)?{
if(pRoleShiftDict?==?NULL?||?pRollMdl?==?NULL?||?m_pRecPerName?==?NULL)?{
return?-1;
}
m_pRecPerName->SetRecogType(REG_CHS_NAME);
return?m_pRecPerName->Mark(m_pClassResultpRoleShiftDictpRollMdl);
}
int?ViterbiNodeNet::PlaceTag(const?RoleShiftDict*?pRoleShiftDictconst?RoleTagModel*?pRollMdl)?{
if(pRoleShiftDict?==?NULL?||?pRollMdl?==?NULL?||?m_pRecPerName?==?NULL)?{
return?-1;
}
return?m_pRecPlace->Mark(m_pClassResultpRoleShiftDictpRollMdl);
}
int?ViterbiNodeNet::GetBestSegment(const?NGRramLMReader*?pLMReaderconst?RoleShiftDict*?m_pRoleShiftDict)?{
if(m_iWordCount?<=?2?||?pLMReader?==?NULL)?{
fprintf(stderr“?詞語的個數(shù)不能小于等于0.\n“);
return?-1;?//?詞語的個數(shù)不能小于等于0.
}
///
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????7160??2012-07-20?16:50??Viterbi算法\Viterbi.cpp
?????文件????????2864??2012-07-20?16:50??Viterbi算法\Viterbi.h
評論
共有 條評論