Def: 這類演算法在做任何事時,該演算法的下一步可能會有無限多件事可以選擇。 (Permitting more than one choice of next move at some step in a computation) 1.演算法中每一個步驟的運算無法被唯一定義。 2.能夠執行非決定性演算法的機器,稱為非決定性的機器 (Non-deterministic Machine)。 2-1 由於非決定性演算法在執行時,每一步可能有無限多件事要處理,故非決定性計算機器需假設有無限多個處理器可平行處理。因此,非決定性計算機器的計算能力比決定性計算機器要強大。 2-2 但是,實際上並不存在此種機器。 Non-deterministic Algorithm的執行步驟分成兩個階段: 1.猜測階段(Guess) 由於沒有一個既定的程序來從事此階段的猜測工作,因此本階段是Non-deterministic 對於本階段,我們只知道一件事: 1-1 如果一個問題有正確解的話,此階段一定可以將這個正確解給猜出來;反之,若該問題沒有正確解的話,則此階段就會隨便給解答。 1-2 至於猜測階段是怎麼將這個解答給找出來的,我們無從得知(不論所給的解是否為正確解) 。 2.驗証階段(Verification) 將上一階段所猜出來的結果加以驗証是否為真 (True)
星期五, 4月 08, 2011
[知識] Non-deterministic Algorithm
星期日, 4月 03, 2011
[旅遊] 319新竹一日蓋章行心得
1. 導航有時還是必要的。雖然地圖上路名大多有標示,不過在寶山的時候,路名跟地圖標示的不一樣,所以多走了一些冤枉路。而且有時候太小的路名也不會標示,遊憩是在山區時候。或是說比例尺太大,地圖沒有標示所有的部分,或是太小而沒有標示小路名,例如在湖口的部分。所以紙本地圖還是有缺點。而且雖然在市區都有標記的很清楚不過,地圖的印刷太雜亂有時候不容易找到路名,像是在新竹市區的時候。
2.在新竹市區看到很多鴿子跟SNG車,回來才發現是因為邱毅所發起的反霸凌示威遊行。
3.在台3線的時候,一路上好多重型機車,其中也有女騎士,不過是少數。在第一間小七,對面是一間萊爾富,停的都是重型機車,這邊小七只有自行車,可能是因為對面停車空間比較大的關係吧。
4.內灣不會很遠,下次可以去看看。
5.原來新湖口指的是湖口車站或是市中心的意思。
6.在新豐鄉蓋章的時候遇到一個怪人,雖然看起來不骯髒,不果衣服都破了,感覺就像是無業遊民。他看到我在蓋章,就過來想要分享心得,雖然我是沒看到他的印章簿,不過感覺他好像真的有在收集的樣子,連台鐵的100章都知道。不知道他怎麼收集的,看起來就不像是有錢的樣子。有些字也不太會寫的感覺,有時候一直重複剛剛講的話。感覺就是一個怪怪的人。
7.除了重機外,一路也發現許多自行車騎士,腿都好壯,我想除非我友好自行車,否則要我這樣騎,我應該騎不遠,雖然我很喜歡騎車到處跑的感覺。可是要我單靠腳力,感覺還是太累了。
8.這次除了319章以外,其他的紀念章蓋的不多,雖然到了竹東的旅遊服務中心,不過那裏一個紀念章也沒有。只有在北埔的文化紀念館蓋了一些以前的古蹟章。因為這個館感覺就很無聊,那裏的工作人員也閒到不知道是在玩遊戲還是只是聽音樂,反正就感覺很爽的樣子,雖然說假日還要上班。
9.湖口往新埔因為沒有直接的道路,可能是因為新埔柿在山中間的平地的關係,所以需要越過山,偏偏道路標示的又不清楚。害我走錯路,雖然是最後還是到了,不過要是沒有手錶上的指南針,我看我八成會走很多冤枉路。不過令人意外的是,雖然新埔的外圍區都是山,大部分都是種茶葉的,不過在市中心感覺還挺熱鬧的,有許多連鎖的商店,那裏的中學生打扮也挺潮流的,有點令人意外。我一開始也很懷疑,這麼山區且有沒有多少觀光資源的地方真的會有小七嗎,沒想到真的有,還有兩間。也幸好有,不然我真的會很失望。不知道為什麼這個地方會有這麼多消費族群可以撐得起這麼多店家。總而言之,新埔跟湖口不應該放在一起蓋,因為這兩個鄉鎮沒有直接連市中心的幹道,應該把新埔鎮放第一位,湖口放最後才對。真是失策,不過因為一開始來不及規畫路線就直接走,所以會發生這樣的情況也是不意外。
蓋章路線
關西 -> 橫山 -> 竹東 -> 北埔 -> 寶山 -> 東區 -> 香山區 -> 北區 -> 竹北 -> 新豐 -> 湖口 -> 新埔
尖石、五峰、峨嵋因為沒有小七而且找店家有點麻煩,所以等下次非假日直接到市公所蓋章好了。
2.在新竹市區看到很多鴿子跟SNG車,回來才發現是因為邱毅所發起的反霸凌示威遊行。
3.在台3線的時候,一路上好多重型機車,其中也有女騎士,不過是少數。在第一間小七,對面是一間萊爾富,停的都是重型機車,這邊小七只有自行車,可能是因為對面停車空間比較大的關係吧。
4.內灣不會很遠,下次可以去看看。
5.原來新湖口指的是湖口車站或是市中心的意思。
6.在新豐鄉蓋章的時候遇到一個怪人,雖然看起來不骯髒,不果衣服都破了,感覺就像是無業遊民。他看到我在蓋章,就過來想要分享心得,雖然我是沒看到他的印章簿,不過感覺他好像真的有在收集的樣子,連台鐵的100章都知道。不知道他怎麼收集的,看起來就不像是有錢的樣子。有些字也不太會寫的感覺,有時候一直重複剛剛講的話。感覺就是一個怪怪的人。
7.除了重機外,一路也發現許多自行車騎士,腿都好壯,我想除非我友好自行車,否則要我這樣騎,我應該騎不遠,雖然我很喜歡騎車到處跑的感覺。可是要我單靠腳力,感覺還是太累了。
8.這次除了319章以外,其他的紀念章蓋的不多,雖然到了竹東的旅遊服務中心,不過那裏一個紀念章也沒有。只有在北埔的文化紀念館蓋了一些以前的古蹟章。因為這個館感覺就很無聊,那裏的工作人員也閒到不知道是在玩遊戲還是只是聽音樂,反正就感覺很爽的樣子,雖然說假日還要上班。
9.湖口往新埔因為沒有直接的道路,可能是因為新埔柿在山中間的平地的關係,所以需要越過山,偏偏道路標示的又不清楚。害我走錯路,雖然是最後還是到了,不過要是沒有手錶上的指南針,我看我八成會走很多冤枉路。不過令人意外的是,雖然新埔的外圍區都是山,大部分都是種茶葉的,不過在市中心感覺還挺熱鬧的,有許多連鎖的商店,那裏的中學生打扮也挺潮流的,有點令人意外。我一開始也很懷疑,這麼山區且有沒有多少觀光資源的地方真的會有小七嗎,沒想到真的有,還有兩間。也幸好有,不然我真的會很失望。不知道為什麼這個地方會有這麼多消費族群可以撐得起這麼多店家。總而言之,新埔跟湖口不應該放在一起蓋,因為這兩個鄉鎮沒有直接連市中心的幹道,應該把新埔鎮放第一位,湖口放最後才對。真是失策,不過因為一開始來不及規畫路線就直接走,所以會發生這樣的情況也是不意外。
蓋章路線
關西 -> 橫山 -> 竹東 -> 北埔 -> 寶山 -> 東區 -> 香山區 -> 北區 -> 竹北 -> 新豐 -> 湖口 -> 新埔
尖石、五峰、峨嵋因為沒有小七而且找店家有點麻煩,所以等下次非假日直接到市公所蓋章好了。
星期四, 3月 24, 2011
[知識] SIFT
SIFT算法的教程、原始碼及應用軟件
1、ubc:DAVID LOWE---SIFT算法的創始人,兩篇經典的文章
http://www.cs.ubc.ca/~lowe/
2、cmu:YanKe---PCASIFT,總結的SIFT方面的文章SO全,超經典
http://www.andrew.cmu.edu/user/yke/
3、ubc:MBROWN---SIFT算法用於圖像拼接的經典應用autopano-sift,包括一個SIFTLIB庫
http://www.cs.ubc.ca/~mbrown/autostitch/autostitch.html
http://www.cs.ubc.ca/~mbrown/panorama/panorama.html
4、toronto:Jepson---Matlab SIFT tutorial, 超級超級超級經典~
http://www.cs.toronto.edu/~jepson
5、ucla:Vedaldi---加州大學一個博士生編的SIFT,Matlab、C的都有,但沒用過
http://www.cs.ucla.edu/~vedaldi/
6、一個小的拼接軟體ptasmblr
http://www.tawbaware.com/ptasmblr.htm
轉自 http://summerstation.spaces.live.com/blog/cns!e39c001cb6e4b188!1501.entry
1、ubc:DAVID LOWE---SIFT算法的創始人,兩篇經典的文章
http://www.cs.ubc.ca/~lowe/
2、cmu:YanKe---PCASIFT,總結的SIFT方面的文章SO全,超經典
http://www.andrew.cmu.edu/user/yke/
3、ubc:MBROWN---SIFT算法用於圖像拼接的經典應用autopano-sift,包括一個SIFTLIB庫
http://www.cs.ubc.ca/~mbrown/autostitch/autostitch.html
http://www.cs.ubc.ca/~mbrown/panorama/panorama.html
4、toronto:Jepson---Matlab SIFT tutorial, 超級超級超級經典~
http://www.cs.toronto.edu/~jepson
5、ucla:Vedaldi---加州大學一個博士生編的SIFT,Matlab、C的都有,但沒用過
http://www.cs.ucla.edu/~vedaldi/
6、一個小的拼接軟體ptasmblr
http://www.tawbaware.com/ptasmblr.htm
轉自 http://summerstation.spaces.live.com/blog/cns!e39c001cb6e4b188!1501.entry
星期二, 12月 14, 2010
[MFC] CImage 直接存取記憶體
//for 8-bit 影像
byte* pRealData=(byte*)m_Image.GetBits(); //取得記憶體開頭
int pit=m_Image.GetPitch(); //每一行的記憶體寬度
for (int y=0; y< Height;y++){
for (int x=0; x< Width;x++){
pRealData[ pit*y + x] = Intensity;
}}
//for 24-bit 影像
byte* pRealData=(byte*)SaveImg.GetBits();
int pit=SaveImg.GetPitch();
int bitCount=3;
for (int y=0; y< height; y++) {
for (int x=0; x< width; x++) {
pRealData [ pit*y + x*bitCount] = R ;
pRealData [ pit*y + x*bitCount+1] = G ;
pRealData [ pit*y + x*bitCount+2] = B;
}}
byte* pRealData=(byte*)m_Image.GetBits(); //取得記憶體開頭
int pit=m_Image.GetPitch(); //每一行的記憶體寬度
for (int y=0; y< Height;y++){
for (int x=0; x< Width;x++){
pRealData[ pit*y + x] = Intensity;
}}
//for 24-bit 影像
byte* pRealData=(byte*)SaveImg.GetBits();
int pit=SaveImg.GetPitch();
int bitCount=3;
for (int y=0; y< height; y++) {
for (int x=0; x< width; x++) {
pRealData [ pit*y + x*bitCount] = R ;
pRealData [ pit*y + x*bitCount+1] = G ;
pRealData [ pit*y + x*bitCount+2] = B;
}}
星期一, 11月 29, 2010
[MFC] Multithread
//Thread function 內容
UINT MyThreadFun(LPVOID LParam)
{
MyThreadInfo *pInfo1=(MyThreadInfo*) LParam;
CTESTDlg *hWnd=(CTESTDlg*)CWnd::FromHandle(pInfo1->Wnd);
CSliderCtrl *slider=(CSliderCtrl*)hWnd->GetDlgItem(IDC_SLIDER1);
slider->SetLineSize(100); // 設定 slider 大小
for(int i=0;i<100;i++){
slider->SetPos(i); // 移動 slider
Sleep(100); // 暫停 thread
}
return(0);
}
//Dialog按鈕程式碼
//開始 Tread
struct MyThreadInfo{
HWND hWnd; // 紀錄產生 thread 的視窗物件
}Info1;
void CTESTDlg::OnBnClickedOk()
{
Info1.hWnd=this->m_hWnd; // 紀錄 Dialog 的window handle
AfxBeginThread(MyThreadFun, (LPVOID)&Info1);
}
UINT MyThreadFun(LPVOID LParam)
{
MyThreadInfo *pInfo1=(MyThreadInfo*) LParam;
CTESTDlg *hWnd=(CTESTDlg*)CWnd::FromHandle(pInfo1->Wnd);
CSliderCtrl *slider=(CSliderCtrl*)hWnd->GetDlgItem(IDC_SLIDER1);
slider->SetLineSize(100); // 設定 slider 大小
for(int i=0;i<100;i++){
slider->SetPos(i); // 移動 slider
Sleep(100); // 暫停 thread
}
return(0);
}
//如果希望 thread function 能放在 class 中, 請宣告它為 static
class CTESTDlg : public CDialog {
static UINT MyThreadFun(LPVOID LParam);
};
///////////////////////////////////////////////////////////////
//Dialog按鈕程式碼
//開始 Tread
struct MyThreadInfo{
HWND hWnd; // 紀錄產生 thread 的視窗物件
}Info1;
void CTESTDlg::OnBnClickedOk()
{
Info1.hWnd=this->m_hWnd; // 紀錄 Dialog 的window handle
AfxBeginThread(MyThreadFun, (LPVOID)&Info1);
}
星期二, 11月 16, 2010
[MFC] Unicode環境下使用CStdioFile來存取中文檔案
因為CStdioFile並不支援Unicode所以無法存取Uncode檔案,而當存取ANSI檔案時又因為Unicode環境下而造成無法使用CStdioFile::ReadString()所讀到的CString。所以加入下面一行程式碼來設定讀入的檔案的地區編碼。
Windows环境下Unicode编程总结和将ANSI转换到Unicode 将Unicode转换到ANSI
setlocale( LC_CTYPE,"cht" );如果是簡體中文則將cht改為chs。
其他參考文章:解决UNICODE字符集下CStdioFile的Writestring无法写入中文的问题
Windows环境下Unicode编程总结和将ANSI转换到Unicode 将Unicode转换到ANSI
[MFC] CImage的簡單複製方法 (Copy CImage)
BOOL ImageCopy(const CImage &srcImage, CImage &destImage)
{
int i,j;//循環變量
if(srcImage.IsNull())
return FALSE;
//原始影像參數
BYTE* srcPtr=(BYTE*)srcImage.GetBits();
int srcBitsCount=srcImage.GetBPP();
int srcWidth=srcImage.GetWidth();
int srcHeight=srcImage.GetHeight();
int srcPitch=srcImage.GetPitch();
//銷毀原有圖像
if( !destImage.IsNull())
{
destImage.Destroy();
}
//創建新圖像
if(srcBitsCount==32) //支援alpha通道
{
destImage.Create(srcWidth,srcHeight,srcBitsCount,1);
}
else
{
destImage.Create(srcWidth,srcHeight,srcBitsCount,0);
}
//加載調色板
if(srcBitsCount<=8&&srcImage.IsIndexed())//需要調色盤
{
RGBQUAD pal[256];
int nColors=srcImage.GetMaxColorTableEntries();
if(nColors>0)
{
srcImage.GetColorTable(0,nColors,pal);
destImage.SetColorTable(0,nColors,pal);//複製調色盤
}
}
//目標影像參數
BYTE *destPtr=(BYTE*)destImage.GetBits();
int destPitch=destImage.GetPitch();
//複製影像數據
for(i=0 ; i<srcHeight;i++)
{
memcpy( destPtr+i*destPitch, srcPtr+i*srcPitch, abs(srcPitch) );
}
return TRUE;
}
星期一, 10月 25, 2010
[攝影] 利用Photoshop做數位黑卡
前置作業:
1. 在Photoshop中同時開啟亮片與暗片。
2. 點選暗片後按Ctrl+A(全選),再按Ctrl+C(拷貝),之後就可以關閉暗片的檔案,你已經用不到暗片了。
3. 點選亮片後按Ctrl+V(貼上),前置作業完成。
繼續:
1. 在LAYER對話框(PALLETE)中先點選第一層也就是暗片的部分,然後點選對話盒最下方,由左邊數來第二個圖示(Add Vector Mask),這時在第一層會出現一個白色的矩形。
2. 在LAYER對話盒點選第二層也就是BACKGROUND的部分,按Ctrl+A(全選),再按Ctrl+C(拷貝)。
3. 按住ALT同時點選在第一步驟時出現的白色長方形,這時畫面會變成白色,再按Ctrl+V(貼上),你會看到黑白影像。
4. 到 Filter / Blur / Gaussian Blur ,把 Radius 設為 40 pixels。
5. 到LAYER對話盒點選BACKGROUND,你就可以看到合成完成的影像。
6. 到 Image/ Adjustment / Shadow/Highlight 將SHADOW值設為24,或其他你認為適當的數值。
7. 回到LAYER對話盒,按上方最右邊的箭頭,將會出現選單,選擇Flaten Image就大功告成了。
引用來源 中文 英文
1. 在Photoshop中同時開啟亮片與暗片。
2. 點選暗片後按Ctrl+A(全選),再按Ctrl+C(拷貝),之後就可以關閉暗片的檔案,你已經用不到暗片了。
3. 點選亮片後按Ctrl+V(貼上),前置作業完成。
繼續:
1. 在LAYER對話框(PALLETE)中先點選第一層也就是暗片的部分,然後點選對話盒最下方,由左邊數來第二個圖示(Add Vector Mask),這時在第一層會出現一個白色的矩形。
2. 在LAYER對話盒點選第二層也就是BACKGROUND的部分,按Ctrl+A(全選),再按Ctrl+C(拷貝)。
3. 按住ALT同時點選在第一步驟時出現的白色長方形,這時畫面會變成白色,再按Ctrl+V(貼上),你會看到黑白影像。
4. 到 Filter / Blur / Gaussian Blur ,把 Radius 設為 40 pixels。
5. 到LAYER對話盒點選BACKGROUND,你就可以看到合成完成的影像。
6. 到 Image/ Adjustment / Shadow/Highlight 將SHADOW值設為24,或其他你認為適當的數值。
7. 回到LAYER對話盒,按上方最右邊的箭頭,將會出現選單,選擇Flaten Image就大功告成了。
引用來源 中文 英文
星期六, 5月 22, 2010
星期四, 4月 01, 2010
[旅遊] 2010-04-01 平溪一日遊
星期日, 1月 04, 2009
[MFC] CSrollView的 ScrollBar
1 OnInitialUpdate()函式裡的sizeTotal.cx=sizeTotal.cy 值要設定
2. CSize sizeTotal(Getx(),Gety());
SetScrollSizes(MM_TEXT, sizeTotal);
2. CSize sizeTotal(Getx(),Gety());
SetScrollSizes(MM_TEXT, sizeTotal);
[VS2005] 怎樣添加事件、映射消息和重載函數
VS2005 的 MFC 添加事件、映射消息和重載函數的操作 和 VS6.0 不一樣,是在類別的屬性頁裡。操作如下:
在「類別檢視」中,右鍵單擊想要操作的類別,點擊「屬性」。在打開的屬性頁中,最上一排按鈕中的「事件」、「訊息」和「覆寫」分別對應「添加事件」、「映射消息」和「重載函數」的操作。
在「類別檢視」中,右鍵單擊想要操作的類別,點擊「屬性」。在打開的屬性頁中,最上一排按鈕中的「事件」、「訊息」和「覆寫」分別對應「添加事件」、「映射消息」和「重載函數」的操作。
星期六, 1月 03, 2009
[MFC] 全螢幕功能-開始工作列未消失
原因是OnGetMinMaxInfo這個函式沒有被OverRide,
,最好是用ClassWizard,不要用手動。因為很可能會沒有效果。
要重寫此函式的原因如下:
程序中有一個地方要說明一下,那就是OnGetMinMaxInfo函數的作用。你可以試一下,如果把這個函數去掉,則當你按下工具欄中的全屏顯示按鈕時,框架視圖確實變大了,但沒有想像的那樣實現全屏顯示,底邊留下一個狀態欄——一個有些發育不良的全屏顯示窗口。為什麼會這樣呢?經過調試後,發現問題出在WM_GETMINMAXINFO消息的處理上。在Windows中,無論什麼時候以何種方式改變窗口的尺寸或大小,是拖拽窗口邊緣也好,或是在代碼中調用改變窗口尺寸的函數也好,總之不管你用什麼方法,Windows都會首先發送WM_GETMINMAXINFO消息。這個消息的意思是說:「嘿,如果你要強迫我的尺寸變大或變小,就附上詳細的MINMAXINFO結構信息,否則我用默認值處理。」大多數應用程序都不用顯式處理這個 WM_GETMINMAXINFO消息(也就是說讓DefWindowProc窗口過程進行缺省處理),而Windows在進行缺省處理時是不會讓一個窗口視圖比屏幕還大的,所以我們會碰上前面講的那個問題。解決的方法是:不要讓Windows對WM_GETMINMAXINFO消息進行缺省處理,而是由我們自己處理,方法如下:
,最好是用ClassWizard,不要用手動。因為很可能會沒有效果。
要重寫此函式的原因如下:
程序中有一個地方要說明一下,那就是OnGetMinMaxInfo函數的作用。你可以試一下,如果把這個函數去掉,則當你按下工具欄中的全屏顯示按鈕時,框架視圖確實變大了,但沒有想像的那樣實現全屏顯示,底邊留下一個狀態欄——一個有些發育不良的全屏顯示窗口。為什麼會這樣呢?經過調試後,發現問題出在WM_GETMINMAXINFO消息的處理上。在Windows中,無論什麼時候以何種方式改變窗口的尺寸或大小,是拖拽窗口邊緣也好,或是在代碼中調用改變窗口尺寸的函數也好,總之不管你用什麼方法,Windows都會首先發送WM_GETMINMAXINFO消息。這個消息的意思是說:「嘿,如果你要強迫我的尺寸變大或變小,就附上詳細的MINMAXINFO結構信息,否則我用默認值處理。」大多數應用程序都不用顯式處理這個 WM_GETMINMAXINFO消息(也就是說讓DefWindowProc窗口過程進行缺省處理),而Windows在進行缺省處理時是不會讓一個窗口視圖比屏幕還大的,所以我們會碰上前面講的那個問題。解決的方法是:不要讓Windows對WM_GETMINMAXINFO消息進行缺省處理,而是由我們自己處理,方法如下:
void CMainFrame::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI)
{
if (m_bFullScreen)
{
lpMMI->ptMaxSize.y = m_FullScreenWindowRect.Height();
lpMMI->ptMaxTrackSize.y = lpMMI->ptMaxSize.y;
lpMMI->ptMaxSize.x = m_FullScreenWindowRect.Width();
lpMMI->ptMaxTrackSize.x = lpMMI->ptMaxSize.x;
}
//CFrameWnd::OnGetMinMaxInfo(lpMMI);
}
星期四, 1月 01, 2009
JPEG 壓縮簡介
/************************************************************************
JPEG 壓縮簡介
-------------
1. 色彩模型
JPEG 的圖片使用的是 YCrCb 顏色模型, 而不是計算機上最常用的 RGB. 關於色
彩模型, 這裡不多闡述. 只是說明, YCrCb 模型更適合圖形壓縮. 因為人眼對圖片上
的亮度 Y 的變化遠比色度 C 的變化敏感. 我們完全可以每個點保存一個 8bit 的亮
度值, 每 2x2 個點保存一個 Cr Cb 值, 而圖像在肉眼中的感覺不會起太大的變化.
所以, 原來用 RGB 模型, 4 個點需要 4x3=12 字節. 而現在僅需要 4+2=6 字節; 平
均每個點佔 12bit. 當然 JPEG 格式裡允許每個點的 C 值都記錄下來; 不過 MPEG 裡
都是按 12bit 一個點來存放的, 我們簡寫為 YUV12.
JPEG 壓縮簡介
-------------
1. 色彩模型
JPEG 的圖片使用的是 YCrCb 顏色模型, 而不是計算機上最常用的 RGB. 關於色
彩模型, 這裡不多闡述. 只是說明, YCrCb 模型更適合圖形壓縮. 因為人眼對圖片上
的亮度 Y 的變化遠比色度 C 的變化敏感. 我們完全可以每個點保存一個 8bit 的亮
度值, 每 2x2 個點保存一個 Cr Cb 值, 而圖像在肉眼中的感覺不會起太大的變化.
所以, 原來用 RGB 模型, 4 個點需要 4x3=12 字節. 而現在僅需要 4+2=6 字節; 平
均每個點佔 12bit. 當然 JPEG 格式裡允許每個點的 C 值都記錄下來; 不過 MPEG 裡
都是按 12bit 一個點來存放的, 我們簡寫為 YUV12.
星期日, 12月 28, 2008
[美工] 等寬字型-for window
等寬字型有時不慎美觀 但是也有人喜歡整齊
1. Courier
2. Courier New
3. Lucida Console
4. Fixedsys
5. Terminal
6. MS Gothic
7. MS Mincho
8. BatangChe
9. DotumChe
10. GulimChe
11. GungsuhChe
12. NSimSun
13. SimHei
14. SimSun
15. 細明體
16. 標楷體
1. Courier
2. Courier New
3. Lucida Console
4. Fixedsys
5. Terminal
6. MS Gothic
7. MS Mincho
8. BatangChe
9. DotumChe
10. GulimChe
11. GungsuhChe
12. NSimSun
13. SimHei
14. SimSun
15. 細明體
16. 標楷體
星期日, 11月 30, 2008
星期二, 11月 18, 2008
[知識] KMP Alogorithm
KMP演算法為一個利用Failure Function(Prefetch Table)的字串比對演算法。時間複雜度為O(Pattern Length+Target Length)。
此演算法最麻煩的部分在於Failure Function的建立。程式碼如下:
手動建立要訣為:(P指Pattern,T指Prefetch Table)
1. 首先(即P[1],因為T[0]必為-1)跟P[0]比對,相同為0(即P[0]+1),不同為-1。
2. 接著,繼續比對時如果前面Failure值為-1,則跟P[0]比,如果不是則跟P[Failure值+1]比。相同則 Failure值+1,不同時則再跟P[0]比,相同則為0,再不同時則為-1。
此演算法最麻煩的部分在於Failure Function的建立。程式碼如下:
void fail2(char *pat)
{
int cnt,pos=0;
int n=strlen(pat);
T[0]= -1;
for(pos=1; pos=0)
{
cnt=T[cnt];
if(pat[pos] == pat[cnt+1])//現在的比對文字 與前一格的Failure Value+1相同
T[pos] = cnt+1;
else
T[pos]=-1;
}
}
手動建立要訣為:(P指Pattern,T指Prefetch Table)
1. 首先(即P[1],因為T[0]必為-1)跟P[0]比對,相同為0(即P[0]+1),不同為-1。
2. 接著,繼續比對時如果前面Failure值為-1,則跟P[0]比,如果不是則跟P[Failure
星期一, 10月 20, 2008
訂閱:
意見 (Atom)