亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? huffman.cpp

?? 計算機英漢機器翻譯系統中的英語詞性標注方法實現
?? CPP
字號:
#include "stdafx.h"

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include "Huffman.h"

unsigned char m_cBitContainer;
int m_cBitCounter;
LPSTR m_pszTarStr;
int m_nTarSite;

CHuffman::CHuffman()
{
	m_cBitContainer = (UCHAR)0;
	m_cBitCounter = 0;

	for ( int Loop=0;Loop<NODETREESIZE;Loop++ ) {
		m_OurTree[Loop].m_lFreq = 0L;
		m_OurTree[Loop].m_nParent = -1;
		m_OurTree[Loop].m_nRight = -1;
		m_OurTree[Loop].m_nLeft = -1;
	}
}

CHuffman::~CHuffman()
{
}

void CHuffman::HuffmanTest()
{
	return;
	int nNodeCounter = 256;
	int Loop;
	for ( Loop=0;Loop<nNodeCounter;Loop++ )	{
		if ( m_OurTree[Loop].m_nRight > 400 )
			ASSERT(FALSE);

		if ( m_OurTree[Loop].m_nRight < -1 )
			ASSERT(FALSE);

		if ( m_OurTree[Loop].m_nLeft > 400 )
			ASSERT(FALSE);

		if ( m_OurTree[Loop].m_nLeft < -1 )
			ASSERT(FALSE);
	}
}

void CHuffman::BuildHufTree(void)
{
	int nNodeCounter = 256;
	int Loop;
	for ( Loop=0;Loop<nNodeCounter;Loop++ )	{
		m_OurTree[Loop].m_nParent = -1;
		m_OurTree[Loop].m_nRight = -1;
		m_OurTree[Loop].m_nLeft = -1;
	}

	while( TRUE ) {
		int nMinFreq0 = -1;
		int nMinFreq1 = -1;
		for ( Loop=0;Loop<nNodeCounter;Loop++ ) {
			if ( Loop != nMinFreq0 ) {
				if ( m_OurTree[Loop].m_lFreq > 0
				  && m_OurTree[Loop].m_nParent == -1 ) {
					if ( (nMinFreq0 == -1)
					 || (m_OurTree[Loop].m_lFreq < m_OurTree[nMinFreq0].m_lFreq) ) {
						if ( nMinFreq1==-1
						  || m_OurTree[nMinFreq0].m_lFreq < m_OurTree[nMinFreq1].m_lFreq ) 
							nMinFreq1=nMinFreq0;
						nMinFreq0 = Loop;
					} else if ( (nMinFreq1 == -1)
						|| (m_OurTree[Loop].m_lFreq < m_OurTree[nMinFreq1].m_lFreq) )
						nMinFreq1 = Loop;
				}
			}
		}
		if ( nMinFreq1 == -1 ) {
			m_nNumOfRootNode = nMinFreq0;
			break;
		}
		m_OurTree[nMinFreq0].m_nParent = nNodeCounter;
		m_OurTree[nMinFreq1].m_nParent = nNodeCounter;
		m_OurTree[nNodeCounter].m_lFreq = m_OurTree[nMinFreq0].m_lFreq
								+ m_OurTree[nMinFreq1].m_lFreq;

		m_OurTree[nNodeCounter].m_nRight = nMinFreq0;
		m_OurTree[nNodeCounter].m_nLeft = nMinFreq1;
		m_OurTree[nNodeCounter].m_nParent = -1;
		nNodeCounter++;
	}

}

void CHuffman::Output1BitToBuff(int nBit)
{
	if ( (m_cBitCounter==8) || (nBit==-1) ) {

		while ( m_cBitCounter < 8 ) {
			m_cBitContainer <<= 1;
			m_cBitCounter ++;
		}

		*(m_pszTarStr + m_nTarSite) = m_cBitContainer;
		m_nTarSite ++;
		m_cBitCounter = 0;

	}
	m_cBitContainer = (m_cBitContainer << 1) | (UCHAR)nBit;
	m_cBitCounter ++;
}

void CHuffman::Compress1ByteToBuff(int node,int child)
{

	if ( m_OurTree[node].m_nParent != -1 )
		Compress1ByteToBuff(m_OurTree[node].m_nParent,node);
	if ( child != -1 ) {
		if ( child == m_OurTree[node].m_nRight )
			Output1BitToBuff(0);
		else if ( child == m_OurTree[node].m_nLeft )
			Output1BitToBuff(1);
	}

}

BOOL CHuffman::CreateHuffmanFreqData(LPSTR pszDicName,
								LPSTR pszHuffmanFreqDataName)
// 產生用于生成HUFFMAN樹的統計數據
{

	FILE *fpEngWordDic = fopen(pszDicName,"rb");
	if ( fpEngWordDic == NULL ) {
		CString strMsg;
		strMsg.Format("Cann't Open File %s!",
					  pszDicName);
		AfxMessageBox(strMsg);
		return FALSE;
	}

	FILE *fpHuffDat = fopen(pszHuffmanFreqDataName,"wb");
	if ( fpHuffDat == NULL ) {
		CString strMsg;
		strMsg.Format("Cann't Create File %s !",
					  pszHuffmanFreqDataName);
		AfxMessageBox(strMsg);
		return FALSE;
	}

	unsigned char c;
	int nIndex;
	long lOrigBytes = 0;
	long lActiveSymbs = 0;
	while ( !feof( fpEngWordDic ) ) {
		c = getc(fpEngWordDic);
		
		if ( c==0x0d || c==0x0a ) continue;
		
		if ( m_OurTree[c].m_lFreq == 0 ) {
			lActiveSymbs ++;
		}
		m_OurTree[c].m_lFreq ++;
		lOrigBytes ++;
	}        
	fwrite(&lOrigBytes,sizeof(lOrigBytes),1,fpHuffDat);
	fwrite(&lActiveSymbs,sizeof(lActiveSymbs),1,fpHuffDat);
	
	for ( nIndex=0;	nIndex<256;nIndex++ ) {
		if ( m_OurTree[nIndex].m_lFreq > 0 ) {
			fwrite(&nIndex,sizeof(char),1,fpHuffDat);
			fwrite(&m_OurTree[nIndex].m_lFreq,sizeof(long),1,fpHuffDat);
		}
	}

	fclose(fpEngWordDic);

	fclose(fpHuffDat);
	return TRUE;
}

BOOL CHuffman::CreateHuffmanFreqDataEx(LPSTR pszDicInfoName,
								LPSTR pszHuffmanFreqDataName)
// 產生用于生成HUFFMAN樹的統計數據
{

	FILE *fpEngWordDic = fopen(pszDicInfoName,"rb");
	if ( fpEngWordDic == NULL ) {
		CString strMsg;
		strMsg.Format("Cann't Open File %s !",
					  pszDicInfoName);
		AfxMessageBox(strMsg);
		return FALSE;
	}

	FILE *fpHuffDat = fopen(pszHuffmanFreqDataName,"wb");
	if ( fpHuffDat == NULL ) {
		CString strMsg;
		strMsg.Format("Cann't Create File %s !",
					  pszHuffmanFreqDataName);
		AfxMessageBox(strMsg);
		return FALSE;
	}

	unsigned char c;
	int nIndex;
	long lOrigBytes = 0;
	long lActiveSymbs = 0;
	char szLine[500];
	char *pszTep;
	do {
		fgets(szLine,500,fpEngWordDic);
		if ( feof(fpEngWordDic) ) break;
		pszTep = strstr(szLine," ,");
		if ( pszTep != NULL )
			pszTep = '\0';
		pszTep = szLine;
		while ( *pszTep != '\0' ) {
			c = *pszTep;
			pszTep ++;

			if ( m_OurTree[c].m_lFreq == 0 ) {
				lActiveSymbs ++;
			}
			m_OurTree[c].m_lFreq ++;
			lOrigBytes ++;
		}
	} while ( TRUE );

	fwrite(&lOrigBytes,sizeof(lOrigBytes),1,fpHuffDat);
	fwrite(&lActiveSymbs,sizeof(lActiveSymbs),1,fpHuffDat);
	
	for ( nIndex=0;	nIndex<256;nIndex++ ) {
		if ( m_OurTree[nIndex].m_lFreq > 0 ) {
			fwrite(&nIndex,sizeof(char),1,fpHuffDat);
			fwrite(&m_OurTree[nIndex].m_lFreq,sizeof(long),1,fpHuffDat);
		}
	}

	fclose(fpEngWordDic);

	fclose(fpHuffDat);
	return TRUE;
}

BOOL CHuffman::ReadHuffmanFreqDate(LPSTR pszHuffmanFreqDataName)
{
	FILE *fpHuffDat = fopen(pszHuffmanFreqDataName,"rb");
	if ( fpHuffDat == NULL ) {
		CString strMsg;
		strMsg.Format("Cann't Create File %s!",
					  pszHuffmanFreqDataName);
		AfxMessageBox(strMsg);
		return FALSE;
	}

	long lOrigBytes = 0;
	long lActiveSyms;
	fread(&lOrigBytes,sizeof(lOrigBytes),1,fpHuffDat);
	fread(&lActiveSyms,sizeof(lActiveSyms),1,fpHuffDat);

	while ( lActiveSyms-- ) {
		unsigned char c;
		fread(&c,sizeof(char),1,fpHuffDat);
		fread(&m_OurTree[c].m_lFreq,sizeof(long),1,fpHuffDat);
	}

	fclose(fpHuffDat);
	return TRUE;
}

void CHuffman::CompressString(LPSTR pszSouStr,int nSouLen,
							  LPSTR pszTarStr,int &nTarLen)
{

	m_cBitContainer = (UCHAR)0;
	m_cBitCounter = 0;

	unsigned char c = 'A';

	m_nTarSite = 0;
	m_pszTarStr = pszTarStr;
	
 	// 在待壓縮串的最大長度小于256的情況使用下面兩行
	*m_pszTarStr = (unsigned char)nSouLen;
	m_pszTarStr ++;

	ASSERT(nSouLen < 256);
	// 在待壓縮串的最大長度大于256的情況使用下面兩行
	//*(short*)m_pszTarStr = (short)nSouLen;
	//m_pszTarStr += sizeof(short);

	while ( c != '\0' ) {
		c = *pszSouStr;
		if ( c == '\0' ) break;
		pszSouStr ++;
		Compress1ByteToBuff(c,0);
	}
	Output1BitToBuff(-1);
	
	nTarLen = m_nTarSite + 1;

	//HuffmanTest();
}	

void CHuffman::DeCompressString(LPCSTR pszSouLine,
					  LPSTR pszTarLine,int &nTarLen)
//注:調用AfxMessageBox后再調用HUFFMAN類的函數將出錯

// pszSouLine 待解壓縮的字符串
// pszTarLine 解壓縮后的字符串
// nTarLen 解壓縮后的字符串的長度
{
	LPCSTR pszNowSouPtr = pszSouLine;
	int nNowSouSite = 0;
	nTarLen = 0;
	
	//nSouLen --;

	//unsigned char m_cBitContainer;
	//unsigned char m_cBitCounter = 0;
	int nNumOfTgSymb;

	// 在待壓縮串的最大長度小于256的情況使用下面兩行
	short sSouLen = (short)*(pszNowSouPtr);
	pszNowSouPtr ++;

	// 在待壓縮串的最大長度大于256的情況使用下面兩行
	//short sSouLen = *((short*)pszNowSouPtr);
	//pszNowSouPtr += sizeof(short);
	
	while ( sSouLen-- ) {
		nNumOfTgSymb = m_nNumOfRootNode;
		while ( m_OurTree[nNumOfTgSymb].m_nRight != -1 ) {   
			if ( m_cBitCounter == 0 ) {
				
				m_cBitContainer = *pszNowSouPtr;
				pszNowSouPtr ++;
				nNowSouSite ++;
				/*
				if ( nNowSouSite > nSouLen ) {
					// 正常情況下這里應永遠執行不到
					*(pszTarLine++) = '\0';
					return;
				}
				*/
				m_cBitCounter = 8;
			}
			if ( m_cBitContainer & 0x80 )
				nNumOfTgSymb = m_OurTree[nNumOfTgSymb].m_nLeft;
			else
				nNumOfTgSymb = m_OurTree[nNumOfTgSymb].m_nRight;
			m_cBitContainer <<= 1;
			m_cBitCounter --;
		}             
		*pszTarLine  = (unsigned char)nNumOfTgSymb;
		pszTarLine ++;
		nTarLen ++;
	}
	*pszTarLine = '\0';
}

BOOL CompressFile()
// 測試用HUFFMAN壓縮和解壓縮
{
	char szEngWordDicName[] = "english.txt";
	char szHuffmanFreqDataName[] = "HuffFreq.dat";
	CHuffman huffman;
	
	BOOL bResult;
	
	/*bResult = huffman.CreateHuffmanFreqData(szEngWordDicName,szHuffmanFreqDataName);
	if ( !bResult ) {
		return FALSE;
	}*/

	bResult = huffman.ReadHuffmanFreqDate(szHuffmanFreqDataName);
	if ( !bResult ) {
		return FALSE;
	}

	huffman.BuildHufTree();
	
	char szSouStr[200];
	char szTarStr[200];
	char szSou2Str[200];
	FILE *fpInfo;
	fpInfo = fopen("CompInfo.txt","wb");
	if ( fpInfo == NULL ) {
		AfxMessageBox("Cann't Create File!");
		return FALSE;
	}
	CString strInfo;

	int nSouLen,nTarLen,nSou2Len;
	FILE *fpText = fopen(szEngWordDicName,"rb");
	LPSTR pszTep;
	int nMaxSouLen = 0;
	int nMaxTarLen = 0;
	do {
		fgets(szSouStr,200,fpText);
		if ( feof(fpText) ) break;

		pszTep = strchr(szSouStr,0x0d);
		if ( pszTep != NULL ) *pszTep = '\0';
		
		nSouLen = strlen(szSouStr);
		huffman.CompressString(szSouStr,nSouLen,szTarStr,nTarLen);
		memset(szTarStr+nTarLen,0x0,10);
		huffman.DeCompressString(szTarStr,szSou2Str,
								nSou2Len);
		if ( nSouLen > nMaxSouLen )
			nMaxSouLen = nSouLen;
		if ( nTarLen > nMaxTarLen )
			nMaxTarLen = nTarLen;

		// Write Compress Info
		strInfo.Format("Sou Len=%03d,TarLen=%03d\r\n",nSouLen,nTarLen);
		fputs(strInfo,fpInfo);
		
		if ( strcmp(szSouStr,szSou2Str) != 0 ) {
			ASSERT(FALSE);
		}
	} while ( TRUE );
	
	strInfo.Format("Max Sou Len=%03d,Max TarLen=%03d\r\n",
					nMaxSouLen,nMaxTarLen);
	fputs(strInfo,fpInfo);
	fclose(fpInfo);
	fclose(fpText);
	AfxMessageBox("Finish!");
	return 0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一级精品大片| 国产精品短视频| 国产精品三级电影| 亚洲成a人片在线不卡一二三区| 免费观看成人av| 91色porny蝌蚪| 国产喂奶挤奶一区二区三区| 首页综合国产亚洲丝袜| 91啪在线观看| 国产欧美日韩三级| 日韩精品免费专区| 色欧美日韩亚洲| 国产精品国产三级国产aⅴ中文| 麻豆91精品91久久久的内涵| 欧美性生交片4| 亚洲欧美怡红院| 成人一二三区视频| 久久无码av三级| 国产中文一区二区三区| 欧美一区二区三区免费大片| 一区二区三区影院| 色婷婷亚洲综合| 亚洲精品成人精品456| 岛国精品在线观看| 国产精品色在线| 成人黄色av网站在线| 欧美极品另类videosde| 国产精品1024| 国产欧美一区二区精品性色超碰 | 亚洲高清视频在线| eeuss国产一区二区三区| 日本一区二区视频在线| 成人综合在线观看| 欧美韩国日本不卡| 成人污视频在线观看| 国产精品免费视频一区| 不卡视频在线看| 国产精品色噜噜| 99这里只有精品| 亚洲三级理论片| 欧美天堂亚洲电影院在线播放| 亚洲综合免费观看高清在线观看| 91高清视频免费看| 亚洲综合色自拍一区| 欧美人与禽zozo性伦| 男男视频亚洲欧美| 国产欧美日韩在线看| 成人伦理片在线| 一区二区三区在线播放| 欧美麻豆精品久久久久久| 日韩精品成人一区二区三区| 日韩亚洲欧美在线| 国产91色综合久久免费分享| 亚洲摸摸操操av| 欧美日本国产视频| 久久99在线观看| 国产精品麻豆网站| 91.com在线观看| 国产美女在线精品| 亚洲素人一区二区| 欧美一级一区二区| 国产91精品精华液一区二区三区 | 成人精品一区二区三区中文字幕| 亚洲色图制服诱惑| 欧美一区二区三区视频在线 | 国产999精品久久久久久绿帽| 中文字幕综合网| 欧美一区二区三区小说| 成人午夜视频在线| 日日夜夜免费精品视频| 亚洲成人激情综合网| 欧美成人精品二区三区99精品| 成人精品视频网站| 天堂午夜影视日韩欧美一区二区| 久久影院电视剧免费观看| 91麻豆文化传媒在线观看| 免费在线看一区| 亚洲乱码中文字幕综合| 日韩美女视频在线| 91久久精品日日躁夜夜躁欧美| 精一区二区三区| 一区二区久久久久| 国产偷国产偷精品高清尤物| 欧美精品v日韩精品v韩国精品v| 高清国产一区二区| 久久不见久久见免费视频1| 亚洲精品国产品国语在线app| 久久久久久久久久美女| 欧美日韩国产综合一区二区三区| 风流少妇一区二区| 蜜臀av一区二区三区| 亚洲精品免费电影| 欧美激情一区不卡| www国产亚洲精品久久麻豆| 欧美日韩在线一区二区| 99v久久综合狠狠综合久久| 国产一区二区三区四区五区美女| 亚洲福利视频一区二区| 亚洲免费视频中文字幕| 国产欧美精品一区aⅴ影院| 日韩女优毛片在线| 欧美另类高清zo欧美| 99久久精品99国产精品| 懂色一区二区三区免费观看| 久久精品免费观看| 日韩黄色免费电影| 日韩国产欧美在线观看| 五月天激情综合| 亚洲成人一区二区在线观看| 一区二区三区视频在线看| 一区二区中文字幕在线| 国产精品视频免费| 国产精品久久一级| 青娱乐精品视频在线| 午夜精品福利视频网站| 亚洲综合色丁香婷婷六月图片| 亚洲激情欧美激情| 亚洲一区视频在线| 午夜久久久久久| 美女性感视频久久| 激情都市一区二区| 国产伦精品一区二区三区在线观看| 加勒比av一区二区| 国产盗摄女厕一区二区三区| 国产成人综合网| 丁香天五香天堂综合| 91丨九色丨蝌蚪丨老版| 色94色欧美sute亚洲线路二 | 一区二区三区精品在线观看| 亚洲综合久久av| 日本不卡在线视频| 久久99精品久久久| 国产 欧美在线| 91精彩视频在线观看| 欧美剧情电影在线观看完整版免费励志电影| 欧美体内she精高潮| 日韩三级视频中文字幕| 久久久噜噜噜久久中文字幕色伊伊| 国产拍欧美日韩视频二区| 亚洲欧美日本在线| 天天av天天翘天天综合网 | 5858s免费视频成人| 日韩精品一区二区三区视频在线观看| 精品国产一区久久| 国产精品久久久久婷婷| 亚洲一区二区三区视频在线| 美女www一区二区| 97久久精品人人澡人人爽| 在线电影欧美成精品| 久久久久久久久岛国免费| 亚洲欧美欧美一区二区三区| 日本免费新一区视频 | 麻豆91在线观看| 99国产精品久久久久久久久久久| 88在线观看91蜜桃国自产| 国产人妖乱国产精品人妖| 午夜天堂影视香蕉久久| 国产乱码一区二区三区| 欧美午夜电影网| 国产女人18水真多18精品一级做| 亚洲一区二区五区| 成人网在线播放| 日韩写真欧美这视频| 亚洲视频精选在线| 国内精品伊人久久久久av一坑 | 91精品国产麻豆国产自产在线| 国产亚洲欧美在线| 日韩精品电影在线| 色欧美乱欧美15图片| 国产欧美一区二区三区在线老狼 | 亚洲天堂精品在线观看| 极品少妇xxxx偷拍精品少妇| 欧美在线免费视屏| 亚洲欧洲日韩在线| 国产一区二区精品久久91| 欧美日韩不卡在线| 一区二区三区毛片| 99国产精品一区| 中文无字幕一区二区三区| 久久99精品国产麻豆婷婷 | 94色蜜桃网一区二区三区| 久久亚洲捆绑美女| 久久99最新地址| 在线电影院国产精品| 亚洲成年人影院| 在线一区二区三区四区| 亚洲人吸女人奶水| 粉嫩高潮美女一区二区三区| 精品国产一区二区三区忘忧草 | 亚洲精选视频在线| 成人免费va视频| 欧美极品另类videosde| 国产精品自拍三区| 久久久久青草大香线综合精品| 免费成人美女在线观看.| 欧美精品123区| 亚洲成av人在线观看| 欧美日韩另类一区| 天堂一区二区在线免费观看| 欧美一区二区视频观看视频|