锘??xml version="1.0" encoding="utf-8" standalone="yes"?>精品二区视频,亚洲乱码国产乱码精品精天堂 ,国产一区二区三区自拍http://www.shnenglu.com/lucency/archive/2008/12/11/69129.html瀛i槼瀛i槼Thu, 11 Dec 2008 01:58:00 GMThttp://www.shnenglu.com/lucency/archive/2008/12/11/69129.htmlhttp://www.shnenglu.com/lucency/comments/69129.htmlhttp://www.shnenglu.com/lucency/archive/2008/12/11/69129.html#Feedback0http://www.shnenglu.com/lucency/comments/commentRss/69129.htmlhttp://www.shnenglu.com/lucency/services/trackbacks/69129.htmlwindows涓婁嬌鐢╩ingw鍜宮sys緙栬瘧global(浠?.7.3鐗堟湰涓哄噯)

1.灝哻onfigure鏂囦歡鐨?455鍒?467琛屾敞閲婃帀.

2.淇敼libutil/path.c鏂囦歡. 鍦╥nclude涔嬪悗娣誨姞:

#if defined(_WIN32) && !defined(__CYGWIN__)
#define mkdir(path,mode) mkdir(path)
#define link(one,two) (-1)
#endif

涓婅堪涓や釜鏂囦歡淇濆瓨鍚? configure, make, make install鍗沖彲.

鐢ㄨ繖縐嶆柟寮忛櫎浜哾oc涓嬬殑texi鏂囦歡娌℃硶緙栬瘧鎴愬姛, 鍏朵粬閮芥病鏈夐棶棰? 緙栬瘧鍒癲oc鐨勬椂鍊? 鐩存帴C-c緇撴潫鍗沖彲.



瀛i槼 2008-12-11 09:58 鍙戣〃璇勮
]]>
All about Awk[璇慮http://www.shnenglu.com/lucency/archive/2008/12/10/69034.html瀛i槼瀛i槼Wed, 10 Dec 2008 03:11:00 GMThttp://www.shnenglu.com/lucency/archive/2008/12/10/69034.htmlhttp://www.shnenglu.com/lucency/comments/69034.htmlhttp://www.shnenglu.com/lucency/archive/2008/12/10/69034.html#Feedback0http://www.shnenglu.com/lucency/comments/commentRss/69034.htmlhttp://www.shnenglu.com/lucency/services/trackbacks/69034.html闃呰鍏ㄦ枃

瀛i槼 2008-12-10 11:11 鍙戣〃璇勮
]]>
gdb鍩虹http://www.shnenglu.com/lucency/archive/2008/08/18/59214.html瀛i槼瀛i槼Mon, 18 Aug 2008 05:31:00 GMThttp://www.shnenglu.com/lucency/archive/2008/08/18/59214.htmlhttp://www.shnenglu.com/lucency/comments/59214.htmlhttp://www.shnenglu.com/lucency/archive/2008/08/18/59214.html#Feedback1http://www.shnenglu.com/lucency/comments/commentRss/59214.htmlhttp://www.shnenglu.com/lucency/services/trackbacks/59214.htmlgdb

榪欑瘒鏂囩珷鍩烘湰涓婃槸鎽樿嚜gdb鎵嬪唽錛岄櫎姝や箣澶栧氨鏄姞浜嗗疄闄呯殑浠g爜鏍蜂緥錛岃繖鏍峰彲浠ユ洿娓呮鐨勭湅鍒頒竴浜涘懡浠ょ殑鎵ц鏁堟灉銆傚綋鐒訛紝榪欏効涓嶄細娑夊強鍒版墍鏈夌殑gdb鍛戒護錛岃屽彧鏄竴浜涘父鐢ㄧ殑銆?/p>

鎴戣繖鍎夸嬌鐢ㄧ殑gdb鐨勭増鏈槸6.8銆備笉榪囧洜涓哄彧鏄竴浜涘父鐢ㄥ懡浠わ紝鍥犳鍦ㄨ佺増鏈笂搴旇涔熸病闂銆傛搷浣滅郴緇熸槸Windows XP銆?/p>

涓.姒傝堪

璋冭瘯鍣ㄧ殑鐩殑鍦ㄤ簬璁╀綘鏌ョ湅紼嬪簭榪愯鏃剁殑鍐呴儴鐘舵侊紱鎴栬呭湪紼嬪簭宕╂簝鐨勬椂鍊欙紝鏌ョ湅紼嬪簭寮傚父鐨勫師鍥犮傚畠浠彲浠ュ湪涓涓嬪嚑涓柟闈㈡彁渚涘府鍔╋細

1)鍚姩紼嬪簭錛屾寜鐓т綘鐨勬剰鎰垮獎鍝嶇▼搴忕殑琛屼負

2)璁╃▼搴忓湪鐗瑰畾鏉′歡鍙戠敓鏃跺仠姝㈣繍琛?/p>

3)褰撶▼搴忓仠姝㈢殑鏃跺欙紝媯鏌ョ▼搴忔鍦ㄥ仛浠涔?/p>

4)鏀瑰彉紼嬪簭鐨勬煇浜涗笢瑗匡紝榪欐牱灝卞彲浠ヨ繍琛屾椂淇bug錛岀劧鍚庣戶緇祴璇曞叾浠栫殑闂銆?/p>

gdb鏀寔澶氱璇█鐨勮皟璇曪紝涓嶈繃鏈鎴愮啛鐨勫簲璇ュ氨鏄痗/c++浜嗐傝繖鍎夸篃浠++紼嬪簭涓轟緥鏉ヨ鏄庛傚鏋滄兂鐭ラ亾鍏朵粬璇█鐨勬敮鎸佹儏鍐碉紝鍙互鐪媑db鎵嬪唽銆?/p>

浜?gdb鐨勮搗鍋?/h2>

gdb鏈甯哥敤鐨勫惎鍔ㄦ柟寮忓氨鏄細

gdb program

鎴栬呭湪紼嬪簭寮傚父緇堟鐨勬椂鍊欒繖鏍鳳細

gdb program core

涔熸垨鑰咃紝浣犲彲浠ttach鍒頒竴涓凡緇忚繍琛岀殑榪涚▼鏉ヨ皟璇曞畠錛屽氨鍍忚繖鏍?

gdb program PID

褰撶劧錛屼篃鍙互鍦ㄥ懡浠よ璁劇疆gdb鐨勫惎鍔ㄥ弬鏁幫紝渚嬪args錛?

gdb 鈥攁rgs gcc -O2 -c foo.c

榪欐牱灝卞彲浠ヨ皟璇昰cc錛屽悓鏃跺皢鍙傛暟"-O2 -c foo.c"浼犵粰gcc銆?/p>

鍙互鐢╣db -help鏌ョ湅gdb鐨勬墍鏈夐夐」銆?/p>

瑕佹兂涓gdb鐨勮繍琛岋紝鍙互杈撳叆quit鎴栬卶錛屼篃鍙互鎸塩trl-d緇勫悎閿?/p>

涓?gdb鍛戒護

鍛戒護璇硶

gdb鍛戒護鐨勫艦寮忎負錛歝ommand [arg1...argn]銆傛瘡涓懡浠ゅ崟鐙竴琛屻傝鐨勯暱搴︽病鏈夐檺鍒訛紙褰撶劧錛屼竴鑸簲璇ヤ篃涓嶄細鏈夊闀匡級銆?/p>

璁稿gdb鐨勫懡浠ら兘浼氭湁緙╁啓鐨勫艦寮忥紝渚嬪break鍙互緙╁啓涓篵銆?/p>

濡傛灉鐩存帴鎸夊洖杞︼紝gdb浼氭墽琛屽垰鍒氳鎵ц鍛戒護銆?/p>

濡傛灉鍛戒護涓湁#瀛楃錛岄偅涔堜粠#寮濮嬬殑瀛楃閮戒細琚綋鎴愭槸娉ㄩ噴銆傝繖涓竴鑸敤鍦ㄥ懡浠ゆ枃浠朵腑銆傚悗闈細鏈変粙緇嶃?/p>

鍛戒護琛ュ叏

gdb鍏鋒湁琛ュ叏鍔熻兘銆傚姛鑳介敭鏄?lt;TAB>銆備緥濡俠reak錛屽湪杈撳叆bre涔嬪悗鎸?lt;TAB> 閿紝gdb灝變細琛ュ叏涓篵reak銆傚鏋滃彧杈撳叆b錛岀劧鍚庢寜<TAB>錛実db浼氬搷涓澹幫紝榪欒鏄庢湁澶氫釜浠寮濮嬬殑鍛戒護銆傝繖縐嶆儏鍐典笅鍐嶆寜涓 嬈?lt;TAB>錛実db灝變細鎶婃墍鏈変互b寮濮嬬殑鍛戒護杈撳嚭鍑烘潵銆備笅闈㈡槸姝ゆ椂鐨勫睆騫曟埅鍥撅細

濡傛灉鍙槸鎯崇湅涓涓嬩互鏌愪釜(浜?瀛楃寮濮嬬殑鍛戒護錛屽彲浠ユ寜<META>?錛岃屼笉鐢ㄦ寜涓ゆ<TAB>銆傚湪娌? 鏈?lt;META>閿殑鐢佃剳涓婏紝鍙互鐢?lt;ESC>閿唬鏇褲傝繖涓懡浠ゆ寜璧鋒潵鏈夌偣楹葷儲錛屾瘮鎸変袱嬈?lt;TAB>瑕侀夯鐑﹀浜嗭紝濡傛灉 涓嶆?lt;TAB>閿鎸夊潖錛屾垜寤鴻浣犺繕鏄寜<TAB>鍚с?/p>

鍛戒護琛ュ叏鍙互鐢ㄤ簬gdb鍛戒護錛実db瀛愬懡浠わ紝紼嬪簭涓殑絎﹀彿鍚嶏紙渚嬪鍑芥暟鍚嶇瓑錛夈?/p>

鍦ㄨ皟璇昪++紼嬪簭鏃訛紝鍩烘湰涓婅偗瀹氫細閬囧埌鐨勯棶棰樺氨鏄噸杞藉嚱鏁般備緥濡傦紝鍦ㄨ緗柇鐐圭殑鏃跺欙紝鍋囪鏈変袱涓悕涓簅verload鐨勫嚱鏁幫紝榪欐椂涓轟簡鍖哄垎鍒板簳鏄偅 涓嚱鏁幫紝灝遍渶瑕佸姞涓婂嚱鏁板弬鏁扮被鍨嬶紙鍑芥暟鍚嶅姞涓婂弬鏁板垪琛ㄤ綔涓洪昏緫涓婄殑涓涓瘝錛夈備負浜嗕嬌gdb鑳藉皢鍙傛暟鍒楄〃涓よ竟鐨勬嫭鍙蜂綔涓鴻繖涓瘝鐨勪竴閮ㄥ垎錛岄渶瑕佺敤鍗曞紩鍙?灝嗗嚱 鏁版暣涓殑鎷搗鏉ャ傜湅涓嬪浘錛?/p>

鑾峰彇甯姪

鍚姩gdb鍚庯紝鍙互杈撳叆鍛戒護help寰楀埌gdb鐨勫懡浠ゅ垪琛ㄣ傛敞鎰忕殑鏄繖鏃惰緭鍑虹殑姣忎釜鏉$洰閮芥槸涓綾誨懡浠ゃ備笂涓浘錛?

寰楀埌鍛戒護綾誨埆鍚庯紝鍙互鐢ㄥ懡浠?help class寰楀埌姝ょ被鍒殑鎵鏈夊懡浠ゃ備笂鍥撅細

涓婇潰鐨勫浘涓彧鏄劇ず浜嗛儴鍒哹reakpoints鍛戒護銆?/p>

鍏朵粬璺熷府鍔╃浉鍏崇殑鍛戒護鏈夛細

a)help command

鐢ㄤ簬鏄劇ず鍛戒護command鐨勫府鍔╀俊鎭?/p>

b)apropos args

榪欓噷鐨刟rgs鍙互浣挎鍒欒〃杈懼紡銆傛樉紺烘墍鏈夊尮閰峚rgs鐨勫懡浠ょ殑綆瑕佽鏄庛?/p>

c)complete args

鏄劇ず鎵鏈変互args寮濮嬬殑鍛戒護銆?/p>

鍙﹀榪樻湁涓や釜寰堟湁鐢ㄧ殑鍛戒護錛?info 鍜?show 銆?/p>

a)info

鐢ㄤ簬鏄劇ず琚皟璇曠▼搴忕殑淇℃伅銆備緥濡備紶閫掑埌褰撳墠鍑芥暟鐨勫弬鏁?info args;鎴栬呮煡鐪嬪綋鍓嶅瘎瀛樺櫒鐨勫?info registers;涔熷彲浠ユ煡鐪嬫柇鐐?info breakpoints銆傚彲浠ョ敤help info鏌ョ湅info鐨勮鏄庛?/p>

b)show

榪欎釜鍛戒護鐢ㄤ簬鏄劇ずgdb鐨勪俊鎭備篃灝辨槸gdb鐨勪竴浜涘睘鎬у箋傚彲浠ョ敤help show鏌ョ湅甯姪淇℃伅銆傝繖涓懡浠ら氬父搴旇鏄厤鍚坰et鐢ㄧ殑錛堢敤浜庤瀹歡db鐨勫睘鎬э級銆?/p>

濂戒簡錛岀幇鍦ㄥgdb搴旇鏈変釜澶ф鐨勮璇嗕簡錛屼笅闈㈡垜浠氨瑕佹嬁鍑犱釜灝忎緥瀛愭潵楠岃瘉涓浜涘父鐢ㄥ懡浠ょ殑鏁堟灉銆侺et's go!

鍥?紺轟緥1

棣栧厛璇存槑涓鐐癸紝瑕佹兂楂樻晥鐨勪嬌鐢╣db鐨勫姛鑳斤紝闇瑕佸湪緙栬瘧紼嬪簭鐨勬椂鍊欒鍔犱笂-g閫夐」錛岃繖涓夐」浼氭妸璋冭瘯淇℃伅鍔犲埌鍙墽琛屾枃浠朵腑銆?/p>

涓嬮潰璇翠竴涓嬬ず渚嬫枃浠訛紝鍖呮嫭涓変釜錛歡db.h錛?gdb.cpp錛?test.cpp

gdb.h
#ifndef _GDB_H
#define _GDB_H 1

class gdb
{
public:
explicit gdb(int v);
void overload(int one);
void overload(int one, int two);
void catch_ex(int ex); //exception
void loop();
private:
int value;
int array[10];
};

#endif

gdb.cpp
#include "gdb.h"
#include <iostream>
using namespace std;

gdb::gdb(int v)
{
value = v;
for(int i=0; i<10; i++)
{
array[i] = i;
}
}

void gdb::overload(int one)
{
cout<<"function overload with one parameter: "<<one<<endl;
}

void gdb::overload(int one, int two)
{
cout<<"function overload with two paremeters: "<<one<<" "<<two<<endl;
}

void gdb::loop()
{
int loop_array[10];
for(int i=0; i<10; i++)
{
loop_array[i] = i;
}

int v=3;
v=3;
v=4;
}

void gdb::catch_ex(int ex)
{
int e = ex;
try
{
if(e <= 0)
{
throw e;
}
else
{
cout<<"function catch_ex: "<<ex<<endl;
}
}
catch(int x)
{
cout<<"exception: "<<x<<endl;
}
}
test.cpp
#include "gdb.h"

int main()
{
gdb g(5);
g.overload(1);
g.overload(1, 2);
g.loop();

g.catch_ex(3);
g.catch_ex(-1);

return 0;
}

濂戒簡錛岀幇鍦ㄥ紑濮嬭皟璇曘傞鍏堝惎鍔╣db錛屾寚瀹氳璋冭瘯鐨勫彲鎵ц鏂囦歡銆傚墠闈㈠凡緇忚榪囦簡錛屽彲浠ョ畝鍗曞湴浣跨敤gdb program鏉ュ惎鍔ㄣ傛垨鑰呭彲浠ラ鍏堝惎鍔╣db錛岀劧鍚庣敤file鍛戒護鎸囧畾瑕佽皟璇曠殑鏂囦歡銆備笅闈㈡槸浠呭惎鍔╣db鍚庣殑鐢婚潰錛?

鐜板湪鐢╢ile鍛戒護鎸囧畾瑕佽皟璇曠殑鏂囦歡錛?/p>

鐒跺悗灝卞彲浠ョ敤 run 鎴栬?r 鍛戒護鏉ヨ繍琛岀▼搴忋傚湪榪愯涔嬪墠錛屼綘鍙兘闇瑕佷負紼嬪簭璁懼畾涓浜涗俊鎭紝榪欎簺淇℃伅鏈変竴涓嬪洓縐嶏細

1)紼嬪簭鍙傛暟

鍙互鐢╯et args鍛戒護璁懼畾紼嬪簭鐨勫弬鏁般傝瀹氬畬鍚庡彲浠ョ敤show args鏌ョ湅璁劇疆鐨勬槸鍚︽紜傚鏋渟et args鍚庨潰涓嶅甫浠諱綍鍙傛暟錛屽垯鍚戠▼搴忎紶閫掔殑鍙傛暟涓虹┖銆?/p>

2)鐜

榪欏効鐨勭幆澧冨氨鏄湪緋葷粺/鐢ㄦ埛閰嶇疆鏂囦歡涓緗殑鐜鍙橀噺,鍍廐OME, PATH涔嬬被鐨?GDB鎻愪緵浜嗗湪璋冭瘯鐨勬椂鍊欐敼鍙樿繖浜涘彉閲忓肩殑鏂瑰紡,榪欐牱褰撻渶瑕佺殑鏃跺欏氨涓嶇敤閫鍑篻db鏉ラ噸鏂拌緗?GDB鎻愪緵鐨勫懡浠ゆ湁:

a) path directory 錛嶏紞 灝?directory 鍔犲埌鐜鍙橀噺PATH鍓嶉潰. 娉ㄦ剰 瀵筆ATH鐨勬敼鍙樺彧瀵硅皟璇曠殑紼嬪簭鏈夋晥, GDB浣跨敤鐨凱ATH涓嶄細鏈夋敼鍙?1

b) show paths 錛嶏紞 鏄劇ずPATH鐨勫箋?/p>

c) show environment [varname] 錛嶏紞 鏄劇ず鐜鍙橀噺varname鐨勫鹼紝濡傛灉涓嶆寚瀹歷arname錛屽垯鏄劇ず鎵鏈夌幆澧冨彉閲忕殑鍊箋?/p>

d) set environment varname [= value] 錛嶏紞 璁劇疆鐜鍙橀噺varname鐨勫間負value銆傝繖涓敼鍙樺彧鏄璋冭瘯鐨勭▼搴忕敓鏁堛傚鏋滀笉鎻愪緵value錛屽垯灝唙arname鐨勫肩疆涓虹┖銆?/p>

e) unset environment varname 錛嶏紞 浠庣幆澧冧腑縐婚櫎浼犻掔粰紼嬪簭鐨勫彉閲弙arname銆?/p>

3)宸ヤ綔鐩綍

鍦ㄥ惎鍔╣db璋冭瘯紼嬪簭鐨勬椂鍊欙紝琚皟璇曠殑紼嬪簭浼氫粠gdb緇ф壙宸ヤ綔鐩綍銆傚綋鐒秅db涔熸彁渚涗簡鍛戒護鏉ヤ慨鏀瑰伐浣滅洰褰曪細

a) cd directory 錛嶏紞 灝?directory 璁句負鏂扮殑宸ヤ綔鐩綍銆?/p>

b) pwd 錛嶏紞 鏄劇ず褰撳墠宸ヤ綔鐩綍銆?/p>

4)鏍囧噯杈撳叆杈撳嚭

榪樻病鎵懼埌鍦╳indows閲岄潰榪欎釜涓滆タ鏈夊暐鐢紝鐜板湪涔熸病鏈塴inux鍙敤錛屼笉濂藉璇淬傛湁闇瑕佺殑鑷繁鐪媑db鎵嬪唽鍚с傛垜綆鍗曟妱涓涓嬫墜鍐屽惂銆?/p>

鍦╣db涓紝鍙互灝唕un鍛戒護鐨勮緭鍏ヨ緭鍑洪噸瀹氬悜鍒版枃浠舵垨鑰呭叾浠栫粓绔備篃鍙互閫氳繃tty鍛戒護璁劇疆琚皟璇曠▼搴忚緭鍏ヨ緭鍑虹殑璁懼銆傚懡浠ゆ牸寮忔槸錛?/p>

tty terminal 鎴栬?set inferior-tty terminal.

tty 灝辨槸 set inferior-tty 鐨勫埆鍚嶃?/p>


鍜氬挌鍜氬挌錛屼笅闈㈡寮忓紑濮嬶紒

涓婇潰鎴戜滑宸茬粡鍚姩浜嗙▼搴? 涔熺煡閬撲簡濡備綍榪愯紼嬪簭銆傚彲鏄鏋滀綘鐩存帴鎵цrun鍛戒護浼氬彂鐜幫紝紼嬪簭鐩存帴榪愯緇撴潫浜嗐傚鏋滀綘鎯沖湪鏌愪竴琛屾垨鑰呮煇涓嚱鏁拌皟鐢ㄧ殑鍦版柟錛屾垨鑰呭綋鏌愪釜鍙橀噺/琛ㄨ揪寮忕殑鍊兼敼鍙樼殑鏃跺欙紝涔熸垨鑰呭湪鏌愪簺浜嬩歡鍙戠敓鐨勬椂鍊欙紞錛嶄緥濡傛姏鍑哄紓甯搞佸姞杞藉姩鎬佸簱錛屾垨鑰呭垱寤哄瓙榪涚▼錛嶏紞鐨勬椂鍊欏仠姝㈢▼搴忚繍琛岋紝閭e簲璇ユ庝箞鍔炲憿錛?/p>

鏈変簡gdb錛屼竴鍒囧氨閮藉ソ鍔炰簡:), 鍒╃敤涓嬮潰榪欎笁涓己澶х殑姝﹀櫒錛屼綘鍙互浠繪剰鐨勫仠姝㈢▼搴忋傚皬蹇冧簡錛屽ぇ瀹跺皬蹇冧簡錛屽伓瑕佺キ鍑鴻繖涓変歡瀹濈墿浜嗭紝瀹冧滑鏄細

鏂偣

鏂偣灝辨槸鎸囧畾涓涓綅緗紝浣垮緱紼嬪簭榪愯鍒拌繖涓綅緗殑鏃跺欎細鍋滀笅鏉ワ紙褰撶劧錛岃繕鍙互璁劇疆鏉′歡鏂偣錛屽綋榪愯鍒版寚瀹氫綅緗椂錛屽彧鏈夋弧瓚充簡璁劇疆鐨勬潯浠訛紝紼嬪簭鎵嶄細鍋滀笅鏉ワ級錛岃繖鏍蜂究浜庤瀵熺▼搴忕殑鍐呴儴鐘舵併傛柇鐐圭浉鍏崇殑鍛戒護涓昏鏈夛細

a)break location

鍦ㄦ寚瀹氫綅緗?location 澶勮緗柇鐐癸紝榪欓噷鐨?location 鍙互鏄嚱鏁板悕錛岃鍙鳳紝鎸囦護鍦板潃絳夛紙鍏充簬濡備綍鎸囧畾 location ,鍙互鐪?a href="http://www.shnenglu.com/lucency/archive/2008/08/18/59214.html#location">榪欓噷錛夈?/p>

b)break

濡傛灉涓嶆寚瀹氫換浣曞弬鏁幫紝break浼氬湪閫夊畾鐨?a href="http://www.shnenglu.com/lucency/archive/2008/08/18/59214.html#stack">鏍堝撫鐨勪笅涓鏉℃寚浠ゅ璁劇疆鏂偣銆?/p>

c)break ... if cond

璁劇疆鏉′歡鏂偣銆傛瘡嬈″埌杈炬柇鐐圭殑鏃跺欓兘浼氬琛ㄨ揪寮?cond 姹傚鹼紝鍙湁褰撶粨鏋滀負闈?鐨勬椂鍊欑▼搴忔墠浼氬湪榪欎釜鏂偣鍋滀笅鏉ャ?/p>

d)tbreak args

璁劇疆涓涓彧鐢熸晥涓嬈$殑鏂偣銆俛rgs璺焍reak鍛戒護閲岀殑鍙傛暟鎰忎箟鐩稿悓錛堜篃灝辨槸璇達紝鍙互涓簂ocation錛屼負絀猴紝鎴栬呮潯浠訛級銆?/p>

e)hbreak args

璁劇疆紜歡鏂偣銆?/p>

f)thbreak args

璁劇疆鍙敓鏁堜竴嬈$殑紜歡鏂偣銆?/p>

g)rbreak regex

鍦ㄦ墍鏈夊尮閰嶆鍒欒〃杈懼紡 regex 鐨勫嚱鏁頒笂璁劇疆鏂偣銆?/p>

h)info breakpoints [n]

i)info break [n]

j)info watchpoints [n]

涓婇潰涓変釜鍛戒護閮芥槸鍒楀嚭褰撳墠鐨勬柇鐐廣佽瀵熺偣鍜屾崟鎹夌偣錛屽鏋滄寚瀹氬弬鏁皀錛屽垯浠呭垪鍑虹n涓殑淇℃伅銆?/p>

鏉ヨ瘯楠屼竴鎶婂惂銆傞鍏堢敤gdb鍚姩紼嬪簭錛屽亣璁炬垜浠兂鍦╰est.cpp鐨?g.overload(1) 榪欎竴琛屾坊鍔犱竴涓柇鐐癸紝閭e氨鎵ц鍛戒護錛歜 test.cpp:6,鎵ц瀹屽悗錛?/p>

榪欐椂鍙互鐢╥nfo break絳夊懡浠ゆ煡鐪嬫柇鐐逛俊鎭細

鐒跺悗鎴戜滑榪愯紼嬪簭錛岀湅鐪嬫湁浠涔堟晥鏋溿?/p>

鐪嬪埌浜嗗惂錛岀▼搴忓仠鍦ㄤ簡鏂偣鎵鍦ㄧ殑琛屻傝繖鏃跺彲浠ョ敤where鎴栬協rame鏌ョ湅褰撳墠鐨勬爤甯т俊鎭紝涔熷彲浠ョ敤 print 鏌ョ湅涓浜涘彉閲忔垨鑰呰〃杈懼紡鐨勪俊鎭紝鎴栬卛nfo args鏌ョ湅鍙傛暟淇℃伅錛岀瓑絳夈?/p>

鍏朵粬鐨勫懡浠ゅぇ瀹跺彲浠ヨ嚜宸卞皾璇曚竴涓嬨?/p>


鏈夋椂鍊欐垜浠茍涓嶇‘瀹氳鍦ㄥ摢閲屽姞鏂偣錛屼緥濡傚綋鎴戜滑鎯沖湪鏌愪釜鍙橀噺琚敼鍙樻垨鑰呰璇匯佽鍐欑殑鏃跺欒紼嬪簭鍋滀笅鏉ワ紝鍙兘鐢變簬璁塊棶鍙橀噺鐨勫湴鏂規瘮杈冨錛岃鎯蟲瘡涓湴鏂歸兘鍔犱笂鏂偣姣旇緝楹葷儲錛岃屼笖寰堝彲鑳芥湁閬楁紡錛岃繖鏃跺欐垜浠氨闇瑕佷緷璧栧彟涓涓己澶х殑鍛戒護浜嗭紝涔熷氨鏄瀵熺偣銆?/p>

瑙傚療鐐?/h3>

瑙傚療鐐規槸涓綾葷壒孌婄殑鏂偣錛屽鏋滈拡瀵規煇涓彉閲忔垨鑰呰〃杈懼紡鎸囧畾涓涓瀵熺偣錛岄偅涔堝綋瀹冧滑鐨勫艱璇?鍐欑殑鏃跺欙紝gdb浼氬仠姝㈢▼搴忕殑鎵ц銆備綘涓嶉渶瑕佸儚璁劇疆鏂偣鏃墮偅鏍鋒槑紜寚瀹氳繖涓瀵熺偣鍦ㄧ▼搴忎腑鐨勪綅緗傝瀵熺偣鐩稿叧鐨勫懡浠ゆ湁錛?/p>

a)watch expr [thread threadnum]

瀵?expr 璁劇疆涓涓瀵熺偣銆傚綋 expr 鐨勫艱鏀瑰彉鐨勬椂鍊欙紝gdb浼氬仠姝㈢▼搴忕殑榪愯銆?/p>

濡傛灉鎸囧畾浜嗙嚎紼嬪弬鏁皌hread threadnum 錛屽垯 鍙湁 鍦ㄧ嚎紼?threadnum 鏀瑰彉 expr 鐨勫兼椂錛岀▼搴忔墠浼氬仠姝€?/p>

b)rwatch expr [thread threadnum]

瀵?expr 璁劇疆涓涓瑙傚療鐐廣傚綋紼嬪簭璇?expr 鐨勫兼椂錛実db浼氬仠姝㈢▼搴忕殑榪愯銆?/p>

c)awatch expr [thread threadnum]

瀵?expr 璁劇疆涓涓闂瀵熺偣銆傚綋紼嬪簭璇繪垨鑰呭啓 expr 鏃訛紝gdb浼氬仠姝㈢▼搴忕殑榪愯銆?/p>

d)info watchpoints

鏄劇ず鎵鏈夌殑鏂偣銆佽瀵熺偣銆佹崟鎹夌偣銆傝窡info break 鐩稿悓銆?/p>

涓嬮潰鍐嶆潵鐪嬬湅瑙傚療鐐圭殑浣跨敤銆?/p>

棣栧厛鎴戜滑璁劇疆涓涓柇鐐瑰湪g.loop()榪欎竴琛岋紝鐒跺悗榪愯鍒拌繖閲屻俿tep榪涘叆loop()鍑芥暟銆傝繖涓涓插懡浠ょ殑鎵ц濡備笅錛?/p>

榪欐椂鎴戜滑宸茬粡榪涘叆loop()鍑芥暟錛岀幇鍦ㄦ垜浠緗嚑涓瀵熺偣銆傝緗懡浠ゅ簭鍒楀拰璁劇疆瀹屽悗鐨勬晥鏋滃灝忥細

鍙互鐪嬪埌鏈?涓仠姝㈢偣錛屽叾涓墠涓や釜鏄垜浠緗殑鏂偣錛屽悗闈笁涓槸瑙傚療鐐廣傚垎鍒負watch, rwatch 鍜?awatch銆傚彟澶栬繕鏈変竴涓湴鏂瑰氨鏄紝x86涓婇粯璁ゆ槸紜歡瑙傚療鐐廣?/p>

濂戒簡錛屾潵榪愯涓涓嬭瘯璇曘?/p>

鍒拌揪絎竴涓瀵熺偣鐨勬椂鍊欑▼搴忓仠姝㈣繍琛岋紝鍚屾椂鎵撳嵃鍑轟簡鍙橀噺鐨勬棫鍊煎拰鏂板鹼紝浠ュ強瑙傚療鐐圭殑浣嶇疆銆?/p>

涓嬮潰鎴戜滑鎺ョ潃榪愯錛岀湅鐪嬮亣鍒板悗闈㈢殑瑙傚療鐐圭殑鏃跺欏張浼氭庢牱銆?/p>

紼嬪簭鍦ㄧ涓変釜瑙傚療鐐瑰仠浜嗕笅鏉ワ紙絎簩涓瀵熺偣涓鴻瑙傚療鐐癸級錛屽悓鏍鋒墦鍗板嚭浜嗗彉閲忕殑鏂版棫鍊煎拰瑙傚療鐐圭殑浣嶇疆銆傜浜屼釜瑙傚療鐐圭敱浜庢槸璇昏瀵熺偣錛岃岀▼搴忎腑娌℃湁璇昏繖涓彉閲忕殑鍦版柟錛屽洜姝よ繍琛岀殑鏃跺欒璺寵繃浜嗐備負浜嗙湅涓涓嬭瑙傚療鐐圭殑鏁堟灉錛屾垜浠啀璁劇疆涓涓瑙傚療鐐癸細

i鏄驚鐜唴鐨勮凱浠e櫒錛屽畠浼氳澶嶅埗緇檒oop_array[i]鍙橀噺錛屼篃灝辨槸浼氳璇匯傚彲浠ョ湅鍒幫紝紼嬪簭浼氬仠姝㈣繍琛岋紝杈撳嚭i鐨勫箋傛敞鎰忥細姣忔瀵筰鐨勮鎿嶄綔閮戒細浣垮緱紼嬪簭鍋滄銆備笅闈㈡槸涓ゆ鎵цcontinue鍛戒護鍚庣殑杈撳嚭錛?/p>

瑙傚療鐐圭殑鍐呭宸笉澶氬氨榪欎簺浜嗐傚彟澶栨湁涓渶瑕佹敞鎰忕殑鍦版柟灝辨槸: watch鍛戒護璁劇疆鐨勮瀵熺偣鍙湁鍦ㄥ彉閲忔垨鑰呰〃杈懼紡鐨勫艱鏀瑰彉寰楁椂鍊欐墠浼氫嬌寰楃▼搴忓仠姝㈣繍琛岋紝濡傛灉鍙槸琚啓錛屼絾鏄兼病鏈夋敼鍙橈紝鍒欑▼搴忎笉浼氬仠姝€?/strong>


涓婇潰宸茬粡璁蹭簡鏂偣銆佽瀵熺偣錛岃屽浜庢煇浜涙儏鍐碉紝榪欎袱縐嶅仠姝㈢偣騫朵笉鏄渶鏈夋晥鐨勬柟寮忋備緥濡傛兂鍦╟++紼嬪簭涓窇鍑哄紓甯哥殑鏃跺欏仠 姝㈢▼搴忥紝榪欐椂鍊欑敤鏂偣灝變笉澶熸湁鏁堜簡錛屽洜涓虹▼搴忎腑鍙兘濂藉寮傚父澶勭悊鐨勫湴鏂癸紝濡傛灉涓涓釜璁劇疆鏂偣錛岄偅灝卞お楹葷儲浜嗭紙褰撶劧濡傛灉鍙鐞嗘煇鍑犱釜寮傚父錛岀敤鏂偣涔熸棤涓嶅彲錛? 鐢氳嚦鐢ㄨ搗鏉ユ洿鐏墊椿錛夛紱鑰岃瀵熺偣灝辨洿涓嶅彲鐢ㄤ簡銆?/p>

榪欑鎯呭喌灝遍渶瑕佺敤鍒版崟鎹夌偣浜嗐?/p>

鎹曟崏鐐?/h3>

鎹曟崏鐐逛篃鏄竴綾葷壒孌婄殑鏂偣錛屽畠鍙互浣垮緱紼嬪簭鍦ㄦ煇縐嶄簨浠跺彂鐢熸椂鍋滄榪愯錛屼緥濡俢++寮傚父錛屾垨鑰呭姞杞藉姩鎬佸簱銆佸垱寤哄瓙榪涚▼絳夈傝緗崟鎹夌偣鐨勫懡浠ゆ槸catch.

catch event

鍏朵腑 event 鍙互鏄細

a)throw

c++鎶涘嚭寮傚父銆?/p>

b)catch

c++鎹曟崏寮傚父銆?/p>

c)exception

Ada寮傚父銆?/p>

d)exception unhandled

紼嬪簭涓湭澶勭悊鐨勫紓甯搞?/p>

e)assert

澶辮觸鐨凙da鏂█銆?/p>

f)exec

瀵筫xec鐨勮皟鐢紙鍙湪HP-UX鍜孏NU/Linux涓彲鐢級銆?/p>

g)fork

瀵筬ork鐨勮皟鐢紙鍙湪HP-UX鍜孏NU/Linux涓彲鐢級銆?/p>

h)vfork

瀵箆fork鐨勮皟鐢紙鍙湪HP-UX鍜孏NU/Linux涓彲鐢級銆?/p>

i)load

鍔ㄦ佸姞杞藉叡浜簱錛堝彧鍦℉P-UX涓彲鐢級銆?/p>

j)load libname

鍔ㄦ佸姞杞藉叡浜簱 libname 錛堝彧鍦℉P-UX涓彲鐢級銆?/p>

k)unload

鍗歌澆宸插姞杞界殑鍏變韓搴擄紙鍙湪HP-UX涓彲鐢級銆?/p>

l)unload libname

鍗歌澆宸插姞杞界殑鍏變韓搴?libname 錛堝彧鍦℉P-UX涓彲鐢級銆?/p>

榪樻湁涓涓緗彧鐢熸晥涓嬈$殑鎹曟崏鐐圭殑鍛戒護鏄細 tcatch event 銆?/p>

涓嬮潰鍐嶇湅涓涓嬫崟鎹夌偣鐨勪嬌鐢ㄣ?/p>

棣栧厛鍦╲test.cpp鐨?g.catch_ex(-1); 璁劇疆涓涓柇鐐癸紝鐒跺悗榪愯錛岃繘鍏ユ鍑芥暟銆?/p>

鐜板湪鎴戜滑璁劇疆涓涓崟鎹夌偣銆傜戶緇繍琛岋細

鍙互鐪嬪埌紼嬪簭鍦ㄦ姏鍑哄紓甯哥殑鍦版柟鍋滄浜嗐?/p>


鍒犻櫎鏂偣

褰撴柇鐐逛笉鍐嶉渶瑕佷簡錛岄偅灝卞簲璇ュ垹闄ゆ帀錛屽惁鍒欐瘡嬈℃墽琛屽埌鏂偣鐨勪綅緗▼搴忛兘瑕佸仠涓嬫潵錛屼細鎶婁漢閫肩柉鐨勩傚垹闄ゆ柇鐐圭殑鍛戒護鏈変袱涓細clear鍜宒elete銆?/p>

a)clear [ location ]

濡傛灉涓嶆寚瀹?location 錛屽垯鍒犻櫎閫夋嫨鐨勬爤甯т腑涓嬩竴鏉¤鎵ц鐨勬寚浠や笂鐨勪換浣曟柇鐐廣傚鏋滈夋嫨鐨勬槸鏈鍐呴儴鐨勬爤甯э紙涔熷氨鏄綋鍓嶆鎵ц鐨勫嚱鏁扮殑鏍堝撫錛夛紝鍒檆lear浼氬皢鍒氬垰浣跨▼搴忓仠姝㈢殑鏂偣琚垹闄ゃ? 鍏充簬 location 鐨勮鏄庡彲浠ョ湅榪欓噷銆?/p>

b)delete [breakpoints] [ range ... ]

鍒犻櫎鎸囧畾鑼冨洿 range 閭g殑鎵鏈夌殑鏂偣銆佽瀵熺偣銆佹崟鎹夌偣銆傚鏋滀笉鎸囧畾鍙傛暟 range 錛屽垯浼氬垹闄ゆ墍鏈夌殑鍋滄鐐廣傝繖閲岀殑 range 鎸囧畾鐨勬槸鏂偣緙栧彿鍖洪棿銆傚彲浠ョ敤info break鏌ョ湅鏂偣淇℃伅銆?/p>


紱佺敤鏂偣

濡傛灉涓嶆兂鍒犻櫎鏂偣錛屽彧鏄兂鏆傛椂浣垮畠澶辨晥錛屽垯鍙互浣跨敤disable鍛戒護銆俤isable鍛戒護鐨勫艦寮忓涓嬶細

a)disable [breakpoints] [ range ...]

浣挎寚瀹氬尯闂?range 鍐呯殑鏂偣澶辨晥銆傚鏋滀笉鎸囧畾 range 錛屽垯鎵鏈夌殑鏂偣閮藉け鏁堛?/p>

浣挎柇鐐圭敓鏁堢殑鍛戒護鏄痚nable錛屽艦寮忔湁錛?/p>

a)enable [breakpoints] [ range ...]

浣挎寚瀹氬尯闂?range 鍐呯殑鏂偣鎴栬呮墍鏈夋柇鐐圭敓鏁堛?/p>

b)enable [breakpoints] once range...

浣挎寚瀹氬尯闂村唴鐨勬柇鐐圭敓鏁堜竴嬈°?/p>

c)enable [breakpoints] delete range...

浣挎寚瀹氬尯闂村唴鐨勬柇鐐圭敓鏁堜竴嬈★紝鐒跺悗鍒犻櫎銆?/p>


鏂偣鏉′歡

鏂偣鏉′歡浣垮緱鍙湁鍦ㄧ浉搴旂殑鏉′歡婊¤凍鏃訛紝鏂偣鎵嶆湁鏁堛傝繖閲岀殑鏉′歡琛ㄨ揪寮忚窡紼嬪簭鎵鐢ㄨ璦鐨勯昏緫琛ㄨ揪寮忕殑璇硶鐩稿悓錛屼緥濡傚湪c/c++璇█閲岋紝鍙互鐢?a==b 鎴栬?x&&y榪欑琛ㄨ揪寮忋?/p>

鏂偣鏉′歡鍙互鍦ㄨ緗柇鐐圭殑鏃跺欐寚瀹氾紝涔熷彲浠ュ湪鏂偣璁劇疆鍚庨氳繃condition鍛戒護鏉ヨ緗垨鑰呮敼鍙樸?condition鐨勫艦寮忎負錛?/p>

a)condition bnum expression

璁劇疆琛ㄨ揪寮?expression 涓哄仠姝㈢偣 bnum 鐨勬潯浠躲?/p>

b)condition bnum

鍒犻櫎鍋滄鐐?bnum 鐨勬潯浠躲?/p>

榪樻湁涓涓懡浠わ紝鍙互浣垮緱gdb蹇界暐鏂偣鐨勬潯浠朵竴瀹氱殑嬈℃暟錛屽叾褰㈠紡涓猴細

a)ingore bnum count


鎸囧畾浣嶇疆

璁稿gdb鍛戒護閮芥帴鍙椾竴涓敤浜庢寚瀹氱▼搴忎綅緗殑鍙傛暟銆備綅緗殑鎸囧畾鏂瑰紡鏈変笅闈㈠嚑縐嶏細

a) linenum

褰撳墠婧愭枃浠剁殑琛屽彿銆?/p>

b) -offset

褰撳墠琛屽墠闈紝璺熷綋鍓嶈闂撮殧涓?offset 鐨勮銆傚綋鍓嶈鍙互榪欐牱紜畾錛氫嬌鐢╨ist鍛戒護錛屾墦鍗板嚭鏉ョ殑鏈鍚庝竴琛屽氨鏄綋鍓嶈錛涙垨鑰呭浜庢柇鐐瑰懡浠わ紝閫夊畾鐨勬爤甯т腑錛岀▼搴忓仠姝㈡墽琛岀殑浣嶇疆灝辨槸褰撳墠琛屻?/p>

c) +offset

褰撳墠琛屽悗闈紝璺熷綋鍓嶈闂撮殧涓?offset 鐨勮銆?/p>

d) filename:linenum

婧愭枃浠?filename 涓殑琛?linenum銆?/p>

e) function

褰撳墠婧愭枃浠朵腑鐨勫嚱鏁?function銆?/p>

f) filename:function

婧愭枃浠?filename 涓殑鍑芥暟 function銆?/p>

g) * address

鎸囧畾紼嬪簭鍦板潃 address銆傚父鐢ㄧ殑 address 褰㈠紡鏈夛細

expression 錛嶏紞 褰撳墠璇█涓湁鏁堢殑琛ㄨ揪寮忋?/p>

funcaddr 錛嶏紞 鍑芥暟鐨勫湴鍧銆傚湪c/c++涓氨鏄嚱鏁板悕銆?/p>

'filename'::funcaddr 錛嶏紞 婧愭枃浠?filename 涓殑鍑芥暟鍦板潃 funcaddr銆?/p>


鍚庨潰鎳掑緱鍐欎簡錛屾殏鏃跺厛鏀句竴鏀俱傚彂鐜板氨綆楁槸鎶勬枃妗o紝鍐呭澶氫簡涔熸槸涓緢绱漢鐨勬椿銆傚攭錛屾噿浜嗭紝涓嶈浜?..

鏍?/h3>

寰呮坊鍔?/p>


鏁版嵁

寰呮坊鍔?/p>


浜?紺轟緥2

寰呮坊鍔?/p>


鍏?鍚庤

榪欑瘒鏂囩珷鍙槸鎹′簡GDB涓渶甯哥敤鐨勪竴浜涗笢瑗匡紝鑰屼笖榪樺彧鏄渶甯哥敤鐨勪笢瑗夸腑鐨勪竴灝忛儴鍒嗭紝鏈夊叴瓚f垨鑰呴渶瑕佺殑鍙互鐩存帴鐪婫DB鐨勬枃妗o紝鍙互鍦?a >榪欓噷鎵懼埌銆?/p>


1. 涓嶇煡閬撴槸涓嶆槸鍥犱負windows鍜宭inux緋葷粺鐨勪笉鍚岋紝鐢╣db鍚姩紼嬪簭鍚庯紝鎵цshow paths鍚庤緭鍑猴細Executables and object file path: 銆備篃灝辨槸璇磋緭鍑虹殑鍊兼槸絀虹殑銆?/p>

瀛i槼 2008-08-18 13:31 鍙戣〃璇勮
]]>Suffix Trees[璇慮http://www.shnenglu.com/lucency/archive/2008/07/12/55944.html瀛i槼瀛i槼Sat, 12 Jul 2008 02:44:00 GMThttp://www.shnenglu.com/lucency/archive/2008/07/12/55944.htmlhttp://www.shnenglu.com/lucency/comments/55944.htmlhttp://www.shnenglu.com/lucency/archive/2008/07/12/55944.html#Feedback5http://www.shnenglu.com/lucency/comments/commentRss/55944.htmlhttp://www.shnenglu.com/lucency/services/trackbacks/55944.html榪欎袱澶╃湅浜嗕笅鍚庣紑鏍戠殑浠嬬粛,鍙戠幇涓綃囨枃绔?璁插緱鎸烘竻妤氱殑,灝辯炕璇戜簡涓?甯屾湜瀵瑰ぇ瀹舵湁甯姪.鍘熸枃绔犲湪榪欏効
甯屾湜鍘熶綔鑰呬笉瑕佹壘鎴戦夯鐑﹀搱銆傚鏋滄湁鍟ョ増鏉冮棶棰橈紝鎴戦┈涓婂垹鎺夈備篃鍥犳錛?font color="#cc0000">姝ゆ枃鏆傛椂紱佹杞澆銆傛涓枃鐗堝鏋滄湁鐗堟潈,褰掓湰浜烘墍鏈?

鎴戣嫳璇湰鏉ュ氨涓嶅拫鍦幫紝鏈変簺鍦版柟鑲畾姣旇緝鐢熺‖鎴栬呮湁璇紝嬈㈣繋鎸囨銆?br>
欏轟究璐翠釜鑷繁鐨勪唬鐮侊紝鍙槸涓涓畝鍗曠殑瀹炵幇錛屾病鏈夎冭檻鏁堢巼闂銆傚鏋滄兂瑕佹洿鎴愮啛紼沖畾鐨勶紝鍙互鐪嬭繖閲?/a>銆?br>
鍐嶉『涓究鎶辨ㄤ袱鍙ャ傛枃绔犱腑鍥劇墖瑕佹槸澶氱偣錛屽彂甯冪殑鏃跺欒繕鐪熸槸楹葷儲錛岃涓涓釜鎻掑叆鎵嶈銆傜敤ScribeFire鍙戝竷濂藉儚涔熶笉鑳界洿鎺ヤ笂浼犲浘鐗囷紙涔熷彲鑳芥槸鎴戜笉浼氾級銆?br>
Data Structures, Algorithms, & Applications in Java
Suffix Trees
Copyright 1999 Sartaj Sahni


浣犵湅瑙佽繃榪欎釜瀛楃涓插悧?(Have You Seen This String?)

鍦ㄧ粡鍏哥殑瀛愪覆鏌ユ壘闂涓?緇欏畾涓涓瓧絎︿覆S鍜屾ā寮廝,鏌ユ壘P鍦⊿涓槸鍚﹀瓨鍦?渚嬪,妯″紡P = cat鍦ㄥ瓧絎︿覆S1 =
The big cat ate the small catfish瀛樺湪(涓ゆ),浣嗘槸涓嶅湪瀛楃涓睸2 = Dogs for sale涓?

浜虹被鍩哄洜緇勮鍒掔殑鐮旂┒鑰呰呯粡甯歌鍩哄洜鏁版嵁搴?-鍏朵腑鍖呭惈鏁頒互涓囪鐨勫熀鍥?-涓煡鎵?font color="#3333ff">瀛愪覆/妯″紡
(榪欓噷鐨?font color="#3333ff">瀛愪覆
鍜?font color="#3333ff">妯″紡鍙互鐩鎬簰鏇夸唬浣跨敤).姣忎釜鍩哄洜鐢卞瓧絎﹂泦{A,C,G,T}涓殑瀛楃鏋勬垚鐨勫簭鍒楁垨鑰呰瀛楃涓茶〃紺?浣嗘槸,鍩哄洜搴撻噷鐨勫ぇ閮ㄥ垎瀛楃涓查暱搴﹀ぇ綰?font color="#3366ff">2000涓瓧絎?榪樻湁涓浜涙湁鏁頒互涓囪鐨勫瓧絎?鑰冭檻鍒板熀鍥犲簱鐨勫ぇ灝忓拰瀛愪覆鏌ユ壘鐨勯鐜?涓涓敖鍙兘蹇殑鐢ㄦ潵浠庡熀鍥犲簱鐨勫瓧絎︿覆涓煡鎵懼瓙涓茬殑綆楁硶鏄緢蹇呰鐨?

鎴戜滑鍙互浣跨敤鍦ㄦ爣鍑嗙殑綆楁硶鏁欑涔︿腑鎻忚堪鐨勬ā寮忓尮閰嶇畻娉曞湪瀛楃涓睸涓煡鎵炬ā寮廝.榪欎釜綆楁硶鐨勫鏉傚害鏄?font color="#3366ff">O(|P| + |S|), 榪欓噷鐨?font color="#3366ff">|P|琛ㄧずP鐨勯暱搴?渚嬪瀛楃(letter)鎴栨暟瀛?digit)鐨勪釜鏁?.褰撹冭檻鍒版ā寮廝鍙兘鍑虹幇鍦⊿涓殑浠諱綍浣嶇疆鏃?榪欎釜澶嶆潅搴︾湅璧鋒潵鏄緢濂界殑.鍥犳,鍦ㄥ緱鍑篜涓嶅湪S涓瓨鍦ㄥ墠,鎴戜滑蹇呴』嫻嬭瘯S鐨勬瘡涓?font color="#3366ff">瀛楃(letter)/鏁板瓧(digit)(榪欓噷鐨勬湳璇瓧絎﹀拰鏁板瓧鎰忎箟鐩稿悓銆傝瘧娉細鍚庨潰浼氱粺涓緲昏瘧涓哄瓧絎?.鏇磋繘涓姝?鍦ㄦ垜浠緱鍑烘ā寮忓湪瀛楃涓蹭腑鍑虹幇鍓?鎴戜滑蹇呴』嫻嬭瘯妯″紡鐨勬瘡涓瓧絎?鍥犳,姣忎釜瀛楃涓叉煡鎵劇畻娉曟秷鑰楃殑鏃墮棿鏄疨鍜孲闀垮害鐨勭嚎鎬у嚱鏁?

褰撶敤緇忓吀鐨勫瓧絎︿覆鍖歸厤綆楁硶鍦⊿涓煡鎵懼涓ā寮?font color="#3366ff">P1,P2,...,Pk鏃?娑堣楃殑鏃墮棿鏄?font color="#3366ff">O(|P1| + |P2| + ... + |Pk| + k|S|)(鍥犱負鏌ユ壘Pi娑堣楃殑鏃墮棿鏄?font color="#3366ff">O(|Pi| + |S|)).鎴戜滑椹笂瑕佸涔犵殑鍚庣紑鏍戠粨鏋勮兘灝嗗鏉傚害鍑忓皯鍒?font color="#3366ff">O(|P1| + |P2| + ... + |Pk| + |S|).姝ゆ椂鐨凮(|S|)鐢ㄤ簬涓篠鍒涘緩鍚庣紑鏍?鏌ユ壘姣忎釜妯″紡鍙渶瑕佽姳璐筄(|Pi|)鐨勬椂闂?鍦⊿鐨勫悗緙鏍戝垱寤哄畬鎴愪箣鍚?.鍥犳,涓鏃鐨勫悗緙鏍戝垱寤哄畬鍚?鏌ユ壘姣忎釜妯″紡闇瑕佺殑鏃墮棿鍐沖畾浜庢ā寮忕殑闀垮害.

鍚庣紑鏍?br>
瀛楃涓睸鐨?strong>鍚庣紑鏍?/strong>瀹為檯涓婃槸S鐨勬墍鏈夐潪絀哄悗緙鐨勫帇緙﹖rie鏍?鍥犳鎴戜滑鏈夋椂灝嗗悗緙鏍戠О涓簍rie,灝嗗畠鐨勫瓙鏍戠О涓簊ubtrie.錛堜笉娓呮trie鏍戠殑鍙互鐪?a >榪欓噷
鎴栬?a target="_blank" >榪欓噷錛?br>
瀛楃涓?/small>S=peeper鐨勯潪絀哄悗緙鏄?font color="#3366ff">peeper,eeper,eper,per,er鍜宺.鍥犳瀛楃涓瞤eeper鐨勫悗緙鏍戞槸鍖呭惈鍏冪礌(榪欎簺鍏冪礌涔熸槸鍏抽敭瀛?peeper,eeper,eper,per,er鍜宺鐨勫帇緙﹖rie鏍?瀛楃涓瞤eeper鐨勫瓧絎﹂泦鏄?font color="#3366ff">{e,p,r}.鍥犳,鍘嬬緝trie鏍戠殑鍩烘暟(radix)鏄?.濡傛灉闇瑕?鎴戜滑鍙互鐢ㄦ槧灝?font color="#3366ff">e -> 0, p -> 1, r -> 2灝嗗瓧絎︿覆鐨勫瓧絎﹁漿鎹負鏁板瓧.榪欑杞崲鍙湁鍦ㄦ垜浠嬌鐢ㄤ竴縐嶈妭鐐圭粨鏋?-姣忎釜鑺傜偣鏈変竴涓寘鍚瓙鑺傜偣鎸囬拡鐨勬暟緇?-鎵嶉渶瑕?鍥?灞曠ず浜唒eeper鍚庣紑鐨勫帇緙﹖rie鏍?甯︽湁鍙樹俊鎭?.榪欐5鍘嬬緝trie鏍戜篃鏄瓧絎︿覆peeper鐨勫悗緙鏍?


Figure 1 Compressed trie for the suffixes of peeper

鐢變簬淇℃伅鑺傜偣(璇戞敞:涔熷氨鏄彾鑺傜偣)D-I涓殑鏁版嵁鏄痯eeper鐨勫悗緙,姣忎釜淇℃伅鑺傜偣鍙渶瑕佷繚瀛樺畠鎵琛ㄧず鐨勫悗緙鍦ㄥ瓧絎︿覆涓殑璧峰绱㈠紩.褰撴垜浠粠1寮濮嬩粠宸﹀埌鍙崇儲寮昿eeper涓殑瀛楃鏃?淇℃伅鑺傜偣D-I鍙渶瑕佷繚瀛樼儲寮?font color="#3366ff">6,2,3,5,1
鍜?font color="#3366ff">4鍗沖彲.鍒╃敤淇濆瓨鍦ㄤ俊鎭妭鐐逛腑鐨勭儲寮?鎴戜滑鍙互璁塊棶S鐨勫悗緙.緇撴灉濡傚浘2鎵紺恒?br>

Figure 2 Modified compressed trie for the suffixes of peeper


姣忎釜鍒嗘敮鑺傜偣鐨勭涓涓瓧孌墊槸鍒頒互鍏朵負鏍圭殑subtrie涓厓绱?璇戞敞:搴旇鏄寚瀛愯妭鐐?鐨勫紩鐢?鎴戜滑鍙互鐢ㄨ寮曠敤鐨勫厓绱犵殑棣栧瓧絎︾殑绱㈠紩浠f浛鍏冪礌寮曠敤.鍥?灞曠ず浜嗘浛鎹㈠悗鐨勬爲.鎴戜滑灝嗕細鐢ㄨ繖縐嶄慨鏀瑰悗鐨勫艦寮忎綔涓哄悗緙鏍戠殑琛ㄧず.


Figure 3 Suffix tree for peeper


濡傛灉鍚庣紑鏍戠殑姣忔潯杈圭敤浠庡垎鏀妭鐐瑰埌鍏跺瓙鑺傜偣鐨勫瓧絎?涓?鏍囨敞,鍙互鏇村鏄撴弿榪板悗緙鏍戠殑鏌ユ壘鍜屾瀯寤虹畻娉?鏍囩鐨勭涓涓瓧絎︾敤鏉ョ‘瀹氳縐誨埌鍝竴涓瓙鑺傜偣,鍓╀綑鐨勫瓧絎﹁〃紺鴻璺寵繃鐨勫瓧絎?涓?.鍥?灞曠ず鐨勫氨鏄浘3鐢ㄨ繖縐嶆柟寮忕敾鍑哄悗寰楀埌鐨勫悗緙鏍?


Figure 4 A more humane drawing of a suffix tree

鍦ㄥ悗緙鏍戠殑鏇寸洿瑙傜殑鐢繪硶涓?浠庝換鎰忔牴鑺傜偣鍒頒俊鎭妭鐐圭殑璺緞涓婃墍鏈夎竟鐨勬爣絳炬嫾鎺ュ湪涓璧峰緱鍒扮殑灝辨槸淇℃伅鑺傜偣琛ㄧず鐨勫悗緙.When the digit number for the root is not 1, the humane drawing of a suffix tree includes a head node with an edge to the former root. This edge is labeled with the digits that are skipped over.

鍚庣紑鏍戠殑鏌愪釜鑺傜偣琛ㄧず鐨勫瓧絎︿覆鏄敱鏍硅妭鐐瑰埌姝よ妭鐐圭殑璺緞涓婄殑鏍囩鎷煎嚭鏉ョ殑.鍥?涓殑鑺傜偣A琛ㄧず絀轟覆epsilon,鑺傜偣C琛ㄧず瀛楃涓瞤e,鑺傜偣F琛ㄧず瀛楃涓瞖per.

鐢變簬鍚庣紑鏍戠殑鍏抽敭瀛楅暱搴︿笉鍚?鎴戜滑蹇呴』淇濊瘉娌℃湁涓涓叧閿瓧鏄彟涓涓殑鐪熷墠緙(proper prefix).褰撳瓧絎︿覆S鐨勬渶鍚庝竴涓瓧絎﹀湪S涓彧鍑虹幇涓嬈?灝變笉浼氬嚭鐜癝鐨勫叾涓竴涓悗緙鏄彟涓涓悗緙鐨勭湡鍓嶇紑鐨勬儏鍐?鍦ㄥ瓧絎︿覆peeper涓?鏈鍚庣殑瀛楃鏄痳,騫朵笖鍙嚭鐜頒簡涓嬈?鍥犳peeper鐨勫悗緙涓氨涓嶄細鍑虹幇鐪熷墠緙鐨勬儏鍐?瀛楃涓瞕ata鐨勬渶鍚庡瓧絎︽槸a,騫朵笖鍑虹幇浜嗕袱嬈?鍥犳,data鏈変袱涓互a寮濮嬬殑鍚庣紑,ata鍜宎.鍚庣紑a鏄痑ta鐨勭湡鍓嶇紑.

褰撳瓧絎︿覆S鐨勬渶鍚庡瓧絎﹀湪S涓嚭鐜板浜庝竴嬈?灝卞繀欏誨湪S鐨勬墍鏈夊悗緙鍚庨潰闄勫姞涓涓柊鐨勫瓧絎?姣斿璇?),榪欐牱浠諱綍涓涓悗緙閮戒笉浼氭槸鍏朵粬鍚庣紑鐨勫墠緙.榪樻湁涓縐嶆柟娉曟槸,鎴戜滑鍙互鍦⊿鍚庨潰闄勫姞鏂扮殑瀛楃#,寰楀埌鏂扮殑涓?#,鐒跺悗鍒涘緩$#鐨勫悗緙鏍?榪欐牱鍋氫箣鍚庡緱鍒扮殑鍚庣紑鏍戞瘮鐩存帴鍦⊿鐨勬瘡涓悗緙鍚庨潰闄勫姞#浼氬涓涓悗緙#.

璁╂垜浠煡鎵鵑偅涓瓙涓插惂
浣嗘槸錛岄鍏堣璇存槑鍑犱釜鏈
鐢?font color="#3366ff">n=|S|
琛ㄧず瑕佸垱寤哄悗緙鏍戠殑瀛楃涓茬殑闀垮害.鎴戜滑浠庡乏鍒板彸渚濇緇橲鐨勫瓧絎︾紪鍙?鏈宸﹁竟鐨勭紪鍙蜂負1.S[i]琛ㄧずS鐨勭i涓瓧絎?suffix(i)琛ㄧず浠庡瓧絎寮濮嬬殑鍚庣紑S[i]...S[n],1<=i<=n.

鍏充簬鏌ユ壘
褰撳湪S涓煡鎵炬ā寮廝鏃?鐢ㄥ埌鐨勪竴涓熀鏈殑瑙傚療(observation)鏄疨鍦⊿涓嚭鐜板綋涓斾粎褰揚鏄疭鐨勬煇涓悗緙鐨勫墠緙.

鍋囪P = P[1]...P[k] = S[i]...S[i+k-1].鍒橮鏄痵uffix(i)鐨勫墠緙.鏃㈢劧suffix(i)鍦ㄦ垜浠殑鍘嬬緝trie鏍戜腑(涔熷氨鏄悗緙鏍?,鎴戜滑鍙互鍒╃敤鍦ㄥ帇緙﹖rie鏍戜腑鏌ユ壘鍏抽敭瀛楀墠緙鐨勭瓥鐣ユ潵鏌ユ壘P.

璁╂垜浠湪瀛楃涓?font color="#3366ff">S=peeper
涓煡鎵炬ā寮?font color="#3366ff">P=per.鍋囪鎴戜滑宸茬粡涓篠鍒涘緩濂戒簡鍚庣紑鏍?鍥?).鏌ユ壘浠庢牴緇撶偣A寮濮?鍥犱負P[1]=p,鎴戜滑欏虹潃鏍囩浠寮濮嬬殑杈?褰撻『鐫姝よ竟緇х畫鏃?鎴戜滑瀵硅竟鏍囩鐨勫墿浣欏瓧絎﹀拰P鐨勫悗緇瓧絎﹀仛姣旇緝.鐢變簬鏍囩鐨勫墿浣欏瓧絎﹁窡P鐨勫瓧絎︾浉絎?鎴戜滑鍒拌揪鍒嗘敮C.鍦ㄥ埌杈綜鐨勮繃紼嬩腑,鎴戜滑宸茬粡浣跨敤浜哖鐨勫墠涓や釜瀛楃.絎笁涓瓧絎︽槸r,鍥犳鎴戜滑浠庤妭鐐笴欏虹潃浠寮濮嬬殑杈圭戶緇?鐢變簬榪欐潯杈規病鏈夊叾浠栧瓧絎?鍥犳涓嶉渶瑕佸叾浠栨瘮杈?鍒拌揪淇℃伅鑺傜偣I.榪欐椂,P涓殑瀛楃宸茬粡鐢ㄥ畬浜?鎴戜滑灝辨柇瀹歅鍦⊿涓?鐢變簬宸茬粡鍒拌揪淇℃伅鑺傜偣I,鎴戜滑鏂畾P瀹為檯涓婃槸S鐨勫悗緙.鍦ㄥ疄闄呯殑鍚庣紑鏍戣〃紺轟腑(鑰屼笉鏄鍥?榪欑浜烘у寲鐨勮〃紺?,淇℃伅鑺傜偣I鍖呭惈绱㈠紩4,榪欏憡璇夋垜浠ā寮廝=per鐢盨=peeper鐨勭4涓瓧絎﹀紑濮?涔熷氨鏄,P=suffix(4)).鏇磋繘涓姝?鎴戜滑鍙互寰楀埌P鍦⊿涓彧鍑虹幇涓嬈?濡傛灉涓涓ā寮忓湪瀛楃涓蹭腑鍑虹幇澶氭,鏌ユ壘浼氬湪鍒嗘敮鑺傜偣涓,鑰屼笉鏄俊鎭妭鐐?(璇戞敞:渚嬪鏌ユ壘pe,鏌ユ壘鍦ㄨ妭鐐笴涓,璇存槑瀹冨湪S涓嚭鐜頒簡涓ゆ--C鏈変袱涓彾瀛愯妭鐐?

鐜板湪鎴戜滑鏉ユ煡鎵炬ā寮?font color="#3366ff">P=eeee.榪樻槸浠庢牴緇撶偣寮濮?鐢變簬P鐨勭涓涓瓧絎︽槸e,鎴戜滑娌跨潃浠寮濮嬬殑杈瑰埌杈綛.涓嬩竴涓瓧絎﹁繕鏄痚,鍥犳鎴戜滑浠嶣寮濮嬫部鐫浠寮濮嬬殑杈圭戶緇?鍦ㄦ部鐫榪欐潯杈瑰悜涓嬬殑榪囩▼涓?鎴戜滑闇瑕佹瘮杈冭竟鏍囩鐨勫墿浣欏瓧絎er鍜孭鐨勫墿浣欏瓧絎e.姣旇緝絎竴瀵瑰瓧絎?p,e)鏃舵棤娉曞尮閰?鍥犳鎴戜滑鏂畾P涓嶅湪S涓?

鍋囪鎴戜滑鏌ユ壘妯″紡P=p.浠庢牴寮濮?娌跨潃浠寮濮嬬殑杈瑰線涓?鍦ㄥ悜涓嬬殑榪囩▼涓?鎴戜滑姣旇緝杈圭殑鍓╀綑瀛楃(鍙湁瀛楃e)鍜屾ā寮忕殑鍓╀綑瀛楃.鐢變簬宸茬粡鍒癙鐨勭粨灝?鎴戜滑鏂畾P鏄互鑺傜偣C涓烘牴鐨剆ubtrie鐨勬墍鏈夊叧閿瓧鐨勫墠緙.鍙互閫氳繃閬嶅巻浠涓烘牴鐨剆ubtrie銆佽闂畇ubtrie鐨勬墍鏈変俊鎭妭鐐規壘鍒癙鍑虹幇鐨勬墍鏈変綅緗傚鏋滃彧闇瑕丳鍑虹幇鐨勪竴涓綅緗紝鍙互鍒╃敤瀛樺偍鍦ㄨ妭鐐笴鐨勭涓閮ㄥ垎鐨勭儲寮曘傚綋娌跨潃鍒拌妭鐐筙鐨勮竟鏌ユ壘鏃舵ā寮忕粨鏉燂紝鎴戜滑灝辮宸插埌杈捐妭鐐筙錛涙煡鎵懼湪鑺傜偣X緇撴潫銆?br>
褰撴煡鎵炬ā寮?font color="#3366ff">P=rope錛屽埄鐢≒鐨勭涓涓瓧絎鍒拌揪淇℃伅鑺傜偣D銆傜敱浜庢ā寮忚繕娌℃湁緇撴潫錛屾垜浠繀欏繪牴鎹瓺鐨勫瓧絎︽鏌鐨勫墿浣欏瓧絎︺傛鏌ユ樉紺篜涓嶆槸D鐨勫叧閿瓧鐨勫墠緙錛屽洜姝涓嶅湪S=peeper涓?br>
鎴戜滑瑕佸仛鐨勬渶鍚庝竴涓煡鎵炬槸瀵規ā寮廝=pepe銆備粠鍥?鐨勬牴緇撶偣寮濮嬶紝鎴戜滑娌跨潃浠寮濮嬬殑杈瑰埌杈捐妭鐐笴銆備笅涓涓湭媯鏌ョ殑瀛楃鏄痯銆傚洜姝わ紝浠嶤寮濮嬶紝鎴戜滑甯屾湜娌跨潃浠寮濮嬬殑杈圭戶緇傜敱浜庢病鏈夋弧瓚寵繖涓潯浠剁殑杈癸紝鎴戜滑鏂畾pepe涓嶅湪peeper涓?br>

Other Nifty Things You Can Do with a Suffix Tree

涓鏃︿負瀛楃涓睸鍒涘緩濂戒簡鍚庣紑鏍戯紝鎴戜滑灝卞彲浠ュ湪O(|P|)鏃墮棿鍐呭垽鏂璖鏄惁鍖呭惈P銆傝繖鎰忓懗鐫濡傛灉涓鴻帋澹瘮浜氱殑鎴忓墽“緗楀瘑嬈т笌鏈變附鍙?#8221;鐨勫唴瀹瑰垱寤轟簡鍚庣紑鏍戯紝鎴戜滑灝卞彲浠ラ潪甯稿揩鐨勫垽鏂枃绔犱腑鏄惁瀛樺湪鐭wherefore art thou銆備簨瀹炰笂錛屽彧闇璇濊垂姣旇緝18涓瓧絎︾殑鏃墮棿錛堟ā寮忕殑闀垮害錛夈傛煡鎵炬椂闂磋窡鏂囩珷鐨勯暱搴︽棤鍏熾?br>
鍏朵粬鍙互蹇熷畬鎴愮殑鏈夎叮浜嬫儏錛?br>
1.鏌ユ壘妯″紡P鐨勬墍鏈夊嚭鐜般傝繖鏄氳繃瀵筆鏌ユ壘鍚庣紑鏍戝疄鐜般傚鏋淧鑷沖皯鍑虹幇涓嬈★紝鏌ユ壘浼氬湪淇℃伅鑺傜偣鎴栬呭垎鏀妭鐐逛腑姝€傚綋涓浜庝俊鎭妭鐐規椂錛孭鍙嚭鐜頒竴嬈°傚鏋滀腑姝簬鍒嗘敮鑺傜偣X錛屾ā寮忓嚭鐜扮殑鎵鏈夊湴鏂瑰彲浠ラ氳繃璁塊棶浠涓烘牴鐨剆ubtrie鐨勪俊鎭妭鐐規潵寰楀埌銆傚鏋滄垜浠寜鐓т笅闈㈢殑鏂瑰紡錛岃繖涓闂搷浣滃彲浠ュ湪O(n)錛坣鏄ā寮忓嚭鐜扮殑嬈℃暟錛夋椂闂村唴瀹屾垚銆?br>
(a)
灝嗘墍鏈夌殑淇℃伅鑺傜偣鎸夌収鑺傜偣鎵琛ㄧず鐨勫悗緙鐨勫瓧鍏稿簭閾捐搗鏉ワ紙榪欎篃鏄粠宸﹀埌鍙蟲壂鎻忎俊鎭妭鐐規椂閬囧埌榪欎簺鑺傜偣鐨勯『搴忥級銆傚浘4鐨勪俊鎭妭鐐逛細鎸夌収E,F,G,H,I,D鐨勯『搴忛摼鎺ヨ搗鏉ャ?br>
(b)
鍦ㄦ瘡涓垎鏀妭鐐瑰唴錛屼繚瀛樹互姝よ妭鐐逛負鏍圭殑subtrie鐨勭涓涓拰鏈鍚庝竴涓俊鎭妭鐐圭殑寮曠敤銆傚浘4涓妭鐐笰,B鍜孋鍒嗗埆淇濆瓨搴忓(E,D),(E,G)鍜?H,I)銆傛垜浠敤搴忓(firstInformationNode, lastInformationNode)鍛ㄦ父浠irstInformationNode寮濮嬨佷互lastInformationNode緇撴潫鐨勯摼銆傝繖涓懆娓鎬細寰楀埌妯″紡P鍑虹幇鐨勬墍鏈変綅緗傛敞鎰忥紝褰撴垜浠湪鍒嗘敮鑺傜偣涓繚瀛樺簭瀵?firstInformationNode, lastInformationNode)鏃訛紝灝變笉闇瑕佸啀淇濆瓨鍒皊ubtrie涓殑淇℃伅鑺傜偣鐨勫紩鐢紙涔熷氨鏄瓧孌礶lement錛夈?br>
2.鏌ユ壘鍖呭惈妯″紡P鐨勬墍鏈夊瓧絎︿覆銆傚亣璁炬垜浠湁涓浜涘瓧絎︿覆S1,S2,... Sk錛屾垜浠兂寰楀埌鎵鏈夊寘鍚玃鐨勫瓧絎︿覆銆備緥濡傦紝鍩哄洜搴撲腑鍖呭惈鏁頒互涓囪鐨勫瓧絎︿覆錛屽綋涓涓爺絀跺憳鎻愪氦涓涓煡璇㈠瓧絎︿覆錛屾垜浠氨瑕佹姤鍛婃墍鏈夊寘鍚妯″紡鐨勫瓧絎︿覆銆備負浜嗘湁鏁堢殑鎵ц榪欑被鏌ヨ錛屽氨闇瑕佸垱寤轟竴涓寘鍚瓧絎︿覆S1$S2$...$Sk#鐨勬墍鏈夊悗緙鐨勫帇緙﹖rie鏍戯紙涔熺О涓哄瀛楃涓插悗緙鏍戯級錛岃繖閲岀殑$,#鏄袱涓笉鍦ㄥ瓧絎︿覆S1, S2, ..., Sk涓嚭鐜扮殑涓嶅悓瀛楃銆傚湪鍚庣紑鏍戠殑姣忎釜錛堝垎鏀級緇撶偣N涓紝淇濆瓨鎵鏈夌殑瀛楃涓睸i鐨勯摼琛紝鍏朵腑Si鏄互N涓烘牴鐨剆ubtrie涓墍鏈夌殑淇℃伅鑺傜偣琛ㄧず鐨勫瓧絎︿覆鐨勫紑濮嬬偣浣嶄簬鍏朵腑鐨勫瓧絎︿覆錛堣瘧娉細鐪熸嫍鍙e晩錛岃繖鍎跨殑鎰忔濆氨鏄鏌愪釜淇℃伅鑺傜偣L錛屽鏋淟琛ㄧず鐨勫瓧絎︿覆浠嶴i鐨勬煇涓綅緗紑濮嬶紝閭e氨灝哠i鐨勫紩鐢ㄦ斁鍒癓鐨勭埗杈堣妭鐐圭殑閾捐〃涓級銆?br>
3.鏌ユ壘S涓嚭鐜版鏁拌嚦灝戜負m>1嬈$殑瀛愪覆銆傝繖涓煡璇㈠彲浠ユ寜鐓т笅闈㈢殑鏂瑰紡鍦∣(|S|)鏃墮棿鍐呭畬鎴愶細
(a)鍛ㄦ父鍚庣紑鏍戯紝瀵規瘡涓垎鏀妭鐐筙錛屼繚瀛樹粠鏍硅妭鐐瑰埌X鑺傜偣鐨勫瓧絎︿覆鐨勯暱搴鍜屼互X涓烘牴鐨剆ubtrie涓俊鎭妭鐐圭殑鏁扮洰m銆?br>(b)鍛ㄦ父鍚庣紑鏍戯紝璁塊棶淇℃伅鑺傜偣鏁?gt;=m鐨勫垎鏀妭鐐廣俵鏈澶х殑鍒嗘敮鑺傜偣琛ㄧず鐨勫氨鏄嚭鐜版鏁?gt;=m鐨勬渶闀垮瓙涓層?br>
娉ㄦ剰姝ラ(a)鍙渶瑕佹墽琛屼竴嬈°傚畬鎴愬悗錛屾垜浠彲浠ュ闇瑕佺殑浠繪剰m鎵ц姝ラ(b)銆傚彟澶栬繕瑕佹敞鎰忥紝褰搈=2鏄紝涓嶉渶瑕佺‘瀹歴ubtrie涓俊鎭妭鐐圭殑鏁扮洰銆傚湪鍚庣紑鏍戜腑錛屾瘡涓垎鏀妭鐐逛箣鍚庢湁涓や釜淇℃伅鑺傜偣銆?br>
4.鏌ユ壘瀛楃涓睸鍜孴鐨勬渶闀垮叕鍏卞瓙涓層傝繖鍙互鎸夌収涓嬮潰鐨勬柟寮忓湪O(|S|+|T|)鏃墮棿鍐呭畬鎴愶細
(a)涓篠鍜孴鍒涘緩澶氬瓧絎︿覆鍚庣紑鏍戯紙涔熷氨鏄?font color="#3366ff">S$T#鐨勫悗緙鏍戯級
(b)鍛ㄦ父鍚庣紑鏍戯紝鏌ユ壘琛ㄧず鐨勫瓧絎︿覆鏈闀匡紝騫朵笖浠ュ叾涓烘牴鐨剆ubtrie鐨勪俊鎭妭鐐硅〃紺虹殑瀛楃涓蹭腑錛岃嚦灝戞湁涓涓粠S寮濮嬶紝鍙︿竴涓粠T寮濮嬬殑瀛楃涓層?br>
娉ㄦ剰錛屾湁涓浉鍏崇殑鏌ユ壘S鍜孴鐨勬渶闀垮叕鍏卞瓙搴忓垪鐨勯棶棰樼敤鍔ㄦ佽鍒掔畻娉曞湪O(|S|*|T|)鏃墮棿鍐呭畬鎴愩?br>
濡備綍鍒涘緩浣犺嚜宸辯殑鍚庣紑鏍?/font>
涓変釜瑙傚療(observation)
涓轟簡鏇存湁鏁堢殑鍒涘緩鍚庣紑鏍戯紝鎴戜滑涓烘瘡涓垎鏀妭鐐規坊鍔犲瓧孌祃ongestProperSuffix銆傝〃紺洪潪絀哄瓧絎︿覆Y鐨勫垎鏀妭鐐圭殑longestProperSuffix瀛楁鎸囧悜琛ㄧずY鐨勬渶闀跨湡鍚庣紑鐨勫垎鏀妭鐐癸紙Y鐨勬渶闀跨湡鍚庣紑閫氳繃鍘繪帀Y鐨勯瀛楃寰楀埌錛夈傛牴緇撶偣鐨刲ongestProperSuffix鏈嬌鐢ㄣ?br>
鍥?琛ㄧず鐨勬槸緇欏浘4鍔犱笂鏈闀跨湡鍚庣紑鎸囬拡鍚庡緱鍒幫紙緇忓父灝嗘渶闀跨湡鍚庣紑鎸囬拡綆縐頒負鍚庣紑鎸囬拡錛夈傚悗緙鎸囬拡鐢ㄧ孩鑹茬澶磋〃紺恒傝妭鐐笴琛ㄧず瀛楃涓瞤e銆俻e鐨勬渶闀垮悗緙e鐢辮妭鐐笲琛ㄧず銆傚洜姝鐨勫悗緙鎸囬拡鎸囧悜B銆俥鐨勬渶闀垮悗緙鏄┖涓層傜敱浜庢牴緇撶偣A琛ㄧず絀轟覆錛屽洜姝鐨勫悗緙鎸囬拡鎸囧悜A銆?br>

Figure 5 Suffix tree of Figure 4 augmented with suffix pointers

瑙傚療1 濡傛灉S鐨勫悗緙鏍戞湁涓涓〃紺哄瓧絎︿覆Y鐨勫垎鏀妭鐐癸紝閭d箞鍚庣紑鏍戜腑涔熸湁涓涓〃紺篩鐨勬渶闀垮悗緙Z鐨勫垎鏀妭鐐廣?br>璇佹槑 璁綪涓鴻〃紺篩鐨勫垎鏀妭鐐廣傜敱浜嶱鏄垎鏀妭鐐癸紝鑷沖皯鏈変袱涓笉鍚岀殑瀛楃x鍜寉錛屼嬌寰桽涓湁涓や釜鍒嗗埆浠x鍜孻y寮濮嬬殑鍚庣紑銆傚洜姝わ紝S鏈変袱涓垎鍒互Zx鍜孼y寮濮嬬殑鍚庣紑銆傚洜姝わ紝S鐨勫悗緙鏍戜腑蹇呯劧鏈変竴涓搴擹鐨勫垎鏀妭鐐廣?br>
瑙傚療2 濡傛灉S鐨勫悗緙鏍戞湁涓涓〃紺篩鐨勫垎鏀妭鐐癸紝閭d箞鏍戜腑瀵筜鐨勬瘡涓悗緙閮芥湁涓涓搴旂殑鍒嗘敮鑺傜偣銆?br>璇佹槑 鐢辮瀵?鍗沖彲寰楀埌銆?br>
娉ㄦ剰鍥?涓湁涓涓〃紺簆e鐨勫垎鏀妭鐐廣傚洜姝わ紝鏍戜腑涓瀹氭湁琛ㄧずe鍜宔psilon鐨勫垎鏀妭鐐廣?br>
鍦ㄦ弿榪板悗緙鏍戠殑鍒涘緩綆楁硶鏃訛紝鏈変袱涓蹇靛緢鏈夌敤錛?font color="#3366ff">last branch node
鍜?font color="#3366ff">last branch index銆傚悗緙suffix(i)鐨刲ast branch node鏄〃紺簊uffix(i)鐨勪俊鎭妭鐐圭殑鐖惰妭鐐廣傚湪鍥?涓紝suffix(1)...suffix(6)鐨刲ast branch node鍒嗗埆鏄疌,B,B,C,B鍜孉銆傚浠繪剰鍚庣紑suffix(i)錛屽叾last branch index lastBranchIndex(i)鏄湪suffix(i)鐨刲ast branch node涓紝浜х敓鍒嗘敮鐨勫瓧絎︾殑绱㈠紩銆傚湪鍥?涓紝lastBranchIndex(1)錛?,鍥犱負錛歴uffix(1)=peeper錛宻uffix(1)鐢變俊鎭妭鐐笻琛ㄧず錛孒鐨勭埗鑺傜偣鏄疌錛汣鐨勫垎鏀槸鍦╯uffix(1)鐨勭涓変釜瀛楃浜х敓鐨勶紱suffix(1)鐨勭涓変釜瀛楃鏄疭[3]銆傚彲浠ラ獙璇佷竴涓嬶紝lastBranIndex[1:6] = [3,3,4,6,6,6]銆?br>
瑙傚療3 鍦⊿鐨勫悗緙鏍戜腑錛?lastBranchIndex(i) <= lastBranchIndex(i+1), 1 <= i < n銆?br>璇佹槑浣滀負緇冧範銆?br>
Get Out That Hammer and Saw, and Start Building

涓轟簡鍒涘緩浣犺嚜宸辯殑鍚庣紑鏍戯紝浣犲繀欏葷敱浣犺嚜宸辯殑瀛楃涓插紑濮嬨傛垜浠嬌鐢≧ = ababbabbaabbabb鏉ラ槓榪板悗緙鏍戠殑鏋勫緩榪囩▼銆傜敱浜嶳鐨勬渶鍚庡瓧絎鍑虹幇浜嗕笉姝竴嬈★紝鎴戜滑鍦≧鍚庨潰闄勫姞瀛楃#錛屼負鏂扮殑瀛楃涓睸=R#鍒涘緩鍚庣紑鏍戙?br>
鍒涘緩絳栫暐
鍚庣紑鏍戠殑鍒涘緩綆楁硶浠庤〃紺虹┖涓茬殑鏍圭粨鐐瑰紑濮嬨傛牴緇撶偣鏄竴涓垎鏀妭鐐廣傚垱寤哄悗緙鏍戣繃紼嬬殑浠諱綍鏃跺欙紝閮芥湁涓涓垎鏀妭鐐硅鎸囧畾浣嶆椿鍔ㄨ妭鐐?active node)銆傝繖鏄彃鍏ヤ笅涓涓悗緙鐨勮搗濮嬭妭鐐廣傜敤activeLength琛ㄧず鏍圭粨鐐瑰搴旂殑瀛楃涓茬殑闀垮害銆傚紑濮嬫椂錛屾牴鑺傜偣鏄椿鍔ㄨ妭鐐癸紝activeLength=0銆傚浘6灞曠ず浜嗗紑濮嬫椂鐨勭姸鎬侊紝緇胯壊鐨勮妭鐐規槸媧誨姩鑺傜偣銆?br>


Figure 6 Initial configuration for suffix tree construction


闅忕潃澶勭悊鐨勮繘琛岋紝鎴戜滑浼氫笉鏂線鏍戜腑娣誨姞鍒嗘敮鑺傜偣鍜屼俊鎭妭鐐廣傛柊娣誨姞鐨勫垎鏀妭鐐圭敤鍝佺孩鑹茶〃紺猴紝鏂版坊鍔犵殑淇℃伅鑺傜偣鐢ㄩ潚鑹茶〃紺恒傚悗緙鎸囬拡涓虹孩鑹層?br>
鍚庣紑鎸夌収suffix(1), suffix(2), ..., suffix(n)鐨勯『搴忎緷嬈℃彃鍏ュ埌鏍戜腑銆傚悗緙浠ヨ繖縐嶉『搴忔彃鍏ユ槸閫氳繃浠庡乏鍒板彸鎵弿瀛楃涓睸鐨勬柟姘忓畬鎴愩傜敤tree(i)琛ㄧず鎻掑叆鍚庣紑suffix(1), ..., suffix(i)涔嬪悗褰㈡垚鐨勬爲錛?font color="#3366ff">lastBranchIndex(j, i)
琛ㄧずtree(i)涓悗緙suffix(j)鐨刲ast branch index銆?font color="#3366ff">minDistance琛ㄧず浠庢椿鍔ㄨ妭鐐瑰埌鍗沖皢鎻掑叆鐨勫悗緙鐨刲ast branch index鐨勮窛紱葷殑涓嬬晫錛堣瘧娉細鎰熻榪欎釜涓滆タ鍦ㄥ疄鐜扮殑鏃跺欐病鍟ユ剰涔夛級銆傚紑濮嬫椂錛宮inDistance = 0騫朵笖lastBranchIndex(1,1) = 1銆傚綋鎻掑叆suffix(i)鏃訛紝婊¤凍鏉′歡lastBranchIndex(i,i) >= i + activeLength + minDistance銆?br>
涓轟簡鍚憈ree(i)涓彃鍏uffix(i+1)錛屾垜浠繀欏婚伒寰涓嬫楠わ細
1.紜畾lastBranchIndex(i+1, i+1)銆備負浜嗗畬鎴愯繖鐐癸紝鎴戜滑浠庡綋鍓嶆椿鍔ㄨ妭鐐瑰紑濮嬨傛柊鍚庣紑鐨勫紑濮嬬殑activeLength涓瓧絎︼紙涔熷氨鏄瓧絎[i+1], S[i+2], ..., S[i + activeLength]錛夊凡鐭ユ槸璺熷綋鍓嶆椿鍔ㄨ妭鐐硅〃紺虹殑瀛楃涓茬浉鍖歸厤鐨勩傚洜姝わ紝涓轟簡紜畾lastBranchIndex(i+1,i+1)錛岄渶瑕佹嫻嬫柊鍚庣紑鐨刟ctiveLength + 1, activeLength + 2, ...瀛楃銆傝繖浜涘瓧絎︾敤浜庣‘瀹歵ree(i)涓繘涓姝ュ鐞嗘椂瑕佺粡榪囩殑璺緞錛屾璺緞濮嬩簬媧誨姩鑺傜偣錛屽綋lastBranchIndex(i+1,i+1)紜畾鏃朵腑姝€傛牴鎹凡鐭ョ殑lastBranchIndex(i+1,i+1) >= i + 1 + activeLength + minDistance錛岃繖涓繃紼嬪彲浠ョ畝鍖栵紝浠庤屽緱鍒版晥鐜囨彁鍗囥?br>
2.濡傛灉tree(i)涓病鏈夎〃紺哄瓧絎︿覆S[i]...S[lastBranchIndex(i+1,i+1)-1]鐨勮妭鐐筙錛屽垯鍒涘緩涓涓?br>
3.涓簊uffix(i+1)娣誨姞涓涓俊鎭妭鐐廣傝繖涓俊鎭妭鐐規槸X鐨勫瀛愶紝浠嶺鍒頒俊鎭妭鐐圭殑杈逛笂鐨勬爣絳炬槸S[lastBranchIndex(i+1, i+1)]...S[n]銆?br>
鍥炲埌渚嬪瓙

鎴戜滑浠庡悜鍥?涓殑鏍憈ree(0)鎻掑叆suffix(1)寮濮嬨傛牴緇撶偣鏄椿鍔ㄨ妭鐐癸紝activeLength = minDistance = 0銆俿uffix(1)鐨勭涓涓瓧絎︽槸S[1]=a銆備粠tree(0)鐨勬椿鍔ㄨ妭鐐瑰紑濮嬫病鏈変互a寮濮嬬殑杈癸紙浜嬪疄涓婏紝姝ゆ椂媧誨姩鑺傜偣娌℃湁浠諱綍杈癸級銆傚洜姝わ紝lastBranchIndex(1,1) = 1銆傛垜浠垱寤轟竴涓柊鐨勪俊鎭妭鐐瑰拰涓鏉¤竟錛岃竟鐨勬爣絳炬槸鏁翠釜瀛楃涓層傚浘7灞曠ず浜嗙粨鏋渢ree(1)銆傛牴緇撶偣渚濈劧鏄椿鍔ㄨ妭鐐癸紝activeLength鍜宮inDistance娌℃湁鍙樺寲銆?br>


Figure 7 After the insertion of the suffix ababbabbaabbabb#



鍦ㄦ垜浠殑鐢繪硶涓紝淇℃伅鑺傜偣鐨勫叆杈圭殑鏍囩鏍囪涓篿+錛宨琛ㄧず鏍囩鍦⊿涓殑寮濮嬩綅緗紝+琛ㄧず鏍囩涓鐩村埌瀛楃涓茬殑緇撳熬銆傚洜姝わ紝鍦ㄥ浘7涓紝1+琛ㄧず瀛楃涓睸[1]...S[n]銆傚浘7涔熷睍紺轟簡瀛楃涓睸銆傛柊鎻掑叆鐨勫悗緙鐢ㄩ潚鑹茶〃紺恒?br>
涓轟簡鎻掑叆鍚庣紑suffix(2)錛屾垜浠啀嬈′粠鏍圭粨鐐瑰紑濮嬫鏌ュ悗緙鐨刟ctiveLength + 1 = 1, activeLength + 2 = 2, ...,瀛楃銆傚洜涓簊uffix(2)鐨勭涓涓瓧絎︽槸S[2]=b錛屾椿鍔ㄨ妭鐐規病鏈変互S[2]=b寮濮嬬殑杈癸紝鎵浠astBranchIndex(2,2) = 2銆傚洜姝ゆ垜浠垱寤烘柊鐨勪俊鎭妭鐐瑰拰鏍囪涓?+鐨勮竟銆傜粨鏋滃鍥?鎵紺恒傛牴緇撶偣渚濈劧鏄椿鍔ㄨ妭鐐癸紝activeLength鍜宮inDistance渚濇棫娌℃湁鍙樺寲銆?br>


Figure 8 After the insertion of the suffix babbabbaabbabb#


娉ㄦ剰鍥?鏄叧浜巗uffix(1)鍜宻uffix(2)鐨勫帇緙﹖rie鏍憈ree(2)銆?br>
涓嬩竴涓悗緙suffix(3)寮濮嬩簬S[3]=a銆傜敱浜巘ree(2)鐨勬椿鍔ㄨ妭鐐規湁涓涓互a寮濮嬬殑杈癸紝鎵浠astBranchIndex(3,3) > 3銆備負浜嗙‘瀹歭astBranchIndex(3,3)錛屽繀闇瑕佹煡鐪媠uffix(3)鐨勬洿榪囧瓧絎︺傚挨鍏舵槸錛屾垜浠渶瑕佹煡鐪嬪敖鍙兘澶氱殑瀛楃錛屼互渚垮尯鍒唖uffix(1)鍜宻uffix(3)銆傞鍏堟瘮杈冨悗緙鐨勭浜屼釜瀛楃S[4]=b鍜岃竟1+鐨勭浜屼釜瀛楃S[2]=b銆傜敱浜嶴[4]=S[2]錛屽繀欏誨仛榪涗竴姝ョ殑姣旇緝銆備笅涓姝ユ瘮杈僑[5]鍜孲[3]銆傜敱浜庤繖涓や釜瀛楃涓嶅悓錛屾垜浠彲浠ョ‘瀹歭astBranchIndex(3,3)鏄?銆傝繖鏃訛紝鎴戜滑闇瑕佹洿鏂癿inDistance涓?.娉ㄦ剰錛屽洜涓簂astBranchIndex(3,3) = 5 = 3 + activeLength + minDistance錛岃繖鏄痬inDistance鐨勬渶澶у彲鑳藉箋?br>
涓轟簡鎻掑叆suffix(3)錛屾垜浠皢tree(2)鐨勮竟1+涓鍒嗕負浜屻傜涓鏉¤竟鐨勬爣絳炬槸1,2;絎竴鏉¤竟鐨勬爣絳炬槸3+銆傝繖涓や釜杈逛箣闂存彃鍏ユ柊鐨勫垎鏀妭鐐廣傚彟澶栵紝榪樿涓烘柊鎻掑叆鐨勫悗緙娣誨姞淇℃伅鑺傜偣銆傜粨鏋滃鍥?鎵紺恒傝竟鏍囩1,2鏄劇ず涓哄瓧絎[1]S[2] = ab銆?br>


Figure 9 After the insertion of the suffix abbabbaabbabb#


tree(3)榪樻病瀹屾垚錛屽洜涓鴻繕娌℃湁紜畾鏂板姞鐨勫垎鏀妭鐐圭殑鍚庣紑鎸囬拡銆傝繖涓垎鏀妭鐐圭殑鏈闀垮悗緙鏄痓錛屼絾鏄搴攂鐨勫垎鏀妭鐐逛笉瀛樺湪銆傚埆鎯婃厡錛屼笅涓涓鍒涘緩鐨勫垎鏀妭鐐瑰氨鏄搴攂鐨勮妭鐐廣?br>
涓嬩竴涓鎻掑叆鐨勫悗緙鏄痵uffix(4)銆傝繖鏄垰鎻掑叆鐨剆uffix(3)鐨勬渶闀垮悗緙銆傛柊鍚庣紑鐨勬彃鍏ヨ繃紼嬬敱鏍規嵁褰撳墠媧誨姩鑺傜偣鐨勫悗緙鎸囬拡紜畾鏂扮殑媧誨姩鑺傜偣寮濮嬨傜敱浜庢牴緇撶偣娌℃湁鍚庣紑鎸囬拡錛屾椿鍔ㄨ妭鐐規病鏈夊彉鍖栥傚洜姝ctiveLength涔熸病鏈夊彉鍖栥備絾鏄紝鎴戜滑蹇呴』鏇存柊minDistance浠ユ弧瓚砽astBranchIndex(4,4) >= 4 + activeLength + minDistance銆傛樉鐒訛紝瀵逛簬鎵鏈夌殑i<= lastBranchIndex(i+1,i+1)銆傚洜姝わ紝lastBranchIndex(i+1,i+1) >= lastBranchIndex(i,i) >= i + activeLength + minDistance銆備負浜嗕繚璇乴astBranchIndex(i+1,i+1) >= i + 1 + activeLength + minDistance錛屾垜浠繀欏誨皢minDistance鍑忓皬1.

鍥犱負minDistance = 1錛屾垜浠粠媧誨姩鑺傜偣寮濮嬶紝娌跨潃S[4]S[5]...鎸囧畾鐨勮礬寰勮褰曘傛垜浠笉闇瑕佹瘮杈冨紑濮嬬殑minDistance涓瓧絎︼紝鍥犱負鍦╩inDistance+1涔嬪墠鐨勫瓧絎﹂兘宸茬粡淇濊瘉鏄尮閰嶇殑浜嗐傜敱浜庢椿鍔ㄨ妭鐐逛互S[4]=b寮濮嬬殑杈圭殑闀垮害澶т簬1,鎴戜滑姣旇緝S[5]鍜岃竟鐨勭浜屼釜瀛楃S[3]銆傚洜涓鴻繖涓や釜瀛楃涓嶅悓錛岃繖鏉¤竟涔熻涓鍒嗕負浜屻傜涓鏉¤竟鐨勬爣絳句負2,2=b錛涚浜屾潯媯夌殑鏍囩涓?+銆傚湪涓ゆ潯杈逛箣闂存坊鍔犳柊鐨勫垎鏀妭鐐笷錛岃繕瑕佷負鏂版彃鍏ョ殑鍚庣紑鍒涘緩淇℃伅鑺傜偣G銆侴璺烣涔嬮棿閫氳繃鏍囩涓?+鐨勮竟榪炴帴銆傜粨鏋滃鍥炬墍紺恒?br>


Figure 10 After the insertion of the suffix bbabbaabbabb#


鐜板湪鎴戜滑瑕佷負鎻掑叆鍚庣紑suffix(3)鏃跺垱寤虹殑鍒嗘敮鑺傜偣D璁劇疆鍚庣紑鎸囬拡銆傝繖涓悗緙鎸囬拡灝辨槸鏂板垱寤虹殑鍒嗘敮鑺傜偣F銆?br>
鑺傜偣F琛ㄧず鐨勫瓧絎︿覆b鐨勬渶闀垮悗緙鏄┖涓層傚洜姝鐨勫悗緙鎸囬拡鎸囧悜鏍圭粨鐐廣傚浘11鏄坊鍔犱簡鍚庣紑鎸囬拡鐨勭粨鏋溿?br>


Figure 11 Trie of Figure 10 with suffix pointers added


涓嬩竴涓鎻掑叆鐨勬槸suffix(5)銆傜敱浜巗uffix(5)鏄垰鎻掑叆鐨勫悗緙suffix(4)鐨勬渶闀垮悗緙錛屾垜浠粠媧誨姩鑺傜偣鐨勫悗緙鎸囬拡寮濮嬨備絾鏄綋鍓嶄綔涓烘椿鍔ㄨ妭鐐圭殑鏍圭粨鐐規病鏈夊悗緙鎸囬拡銆傚洜姝わ紝媧誨姩鑺傜偣涓嶅彉銆備負浜嗕繚鎸乴astBranchIndex, activeLength, minDistance浠ュ強灝嗘彃鍏ョ殑鍚庣紑鐨勭儲寮?5)涔嬮棿鐨勫叧緋伙紝闇瑕佸皢minDistance鍑忓皯1.鍥犳錛宮inDistance鍙樹負0.

鍥犱負activeLength=0錛屾垜浠渶瑕佷粠suffix(5)鐨勯瀛楃S[5]寮濮嬫鏌ャ傛椿鍔ㄨ妭鐐規湁涓鏉′互S[5]=b寮濮嬬殑杈廣傛垜浠部鐫榪欐潯杈規瘮杈冨悗緙瀛楃鍜屾爣絳懼瓧絎︺傜敱浜庢墍鏈夌殑瀛楃閮藉尮閰嶏紝鎴戜滑鍒拌揪鑺傜偣F銆傜幇鍦‵鎴愪負媧誨姩鑺傜偣錛堝湪媯鏌ュ悗緙瀛楃鐨勮繃紼嬩腑錛岄亣鍒扮殑鍒嗘敮鑺傜偣閮芥垚涓烘柊鐨勬椿鍔ㄨ妭鐐癸級錛宎ctiveLength=1銆傛垜浠粠褰撳墠媧誨姩鑺傜偣鐨勬煇鏉¤竟寮濮嬬戶緇瘮杈冦傜敱浜庝笅涓涓姣旇緝鐨勫悗緙瀛楃鏄疭[6]=a錛屾垜浠嬌鐢ㄤ互a寮濮嬬殑杈癸紙濡傛灉榪欐牱鐨勮竟涓嶅瓨鍦紝鏂板悗緙鐨刲astBranchIndex鏄痑ctiveLength+1錛夈傝繖鏉¤竟鐨勬爣絳炬槸3+銆傚綋姣旇緝鍒版柊鍚庣紑鐨勫瓧絎[10]=a鍜岃竟鐨勫瓧絎[7]=b鏃訛紝姣旇緝緇撴潫銆傚洜姝わ紝lastBranchIndex(5,5) = 10. minDistance璁劇疆涓哄厑璁哥殑鏈澶у鹼紝涔熷氨鏄痩astBranchIndex(5,5) - (index of suffix to be inserted) - activeLength = 10 - 5 - 1 = 4.銆?br>
涓轟簡鎻掑叆suffix(5)錛屾垜浠皢鑺傜偣F鍜孋涔嬮棿鐨勮竟鍒嗚涓轟簩銆傚垎瑁傚嚭鐜板湪杈?F,C)鐨剆plitDigit=5鐨勫瓧絎︿綅緗?br>


Figure 12 After the insertion of the suffix babbaabbabb#

鍚庨潰鍑犱釜鍚庣紑鐨勬彃鍏ヨ繃紼嬭窡鍓嶉潰鍑犱釜瀹屽叏涓鏍鳳紝灝變笉緲昏瘧浜嗭紝鎰熷叴瓚g殑鍙互鐪嬬湅鍘熸枃錛屾垜鍙妸鍥捐創鍦ㄨ繖鍎匡紝濡傛灉涓婇潰鐨勯儴鍒嗙湅鏄庣櫧浜嗭紝閭d箞鍙湅涓嬮潰鐨勫嚑寮犲浘涔熻兘鏄庣櫧鏄庝箞鎻掑叆鐨勩?/font>


Figure 13 After the insertion of the suffix abbaabbabb#


Figure 14 After the insertion of the suffix bbaabbabb#


Figure 15 After the insertion of the suffix baabbabb#


Figure 16 After the insertion of the suffix aabbabb#


Figure 17 After the insertion of the suffix abbabb#


Figure 18 After the insertion of the suffix bbabb#


Figure 19 After the insertion of the suffix babb#


Figure 20 After the insertion of the suffix abb#


Figure 21 After the insertion of the suffix bb#


澶嶆潅搴﹀垎鏋?/big>
鐢╮琛ㄧず瀛楃涓睸鐨勫瓧絎﹂泦鐨勫ぇ灝忥紝n琛ㄧずS鐨勯暱搴︼紙涔熷氨鏄悗緙鐨勬暟鐩級銆?/n錛宭astbranchindex(i,i)>
涓轟簡鎻掑叆suffix(i)錛屾垜浠?/n錛宭astbranchindex(i,i)>
(a)娌跨潃媧誨姩鑺傜偣鐨勫悗緙鎸囬拡錛堥櫎闈炴椿鍔ㄨ妭鐐規槸鏍圭粨鐐癸級銆?/n錛宭astbranchindex(i,i)>
(b)鍦ㄥ凡鍒涘緩鐨勫悗緙鏍戜腑鍚戜笅縐誨姩錛岀洿鍒扮粡榪囦簡minDistance涓瓧絎︺?/n錛宭astbranchindex(i,i)>
(c)鐒跺悗渚濇姣旇緝鍚庣紑鍜岃竟鐨勫瓧絎︼紝鐩村埌紜畾浜唋astBranchIndex(i,i)涓烘銆?/n錛宭astbranchindex(i,i)>
(d)鏈鍚庢彃鍏ユ柊鐨勪俊鎭妭鐐瑰拰鍙兘鐨勫垎鏀妭鐐廣?/n錛宭astbranchindex(i,i)>

(a)閮ㄥ垎娑堣楃殑鎬葷殑鏃墮棿鏄疧(n)錛堜竴鍏辨湁n姝ゆ彃鍏ワ級

(b) 閮ㄥ垎涓紝鍦ㄥ悗緙鏍戜腑寰涓嬬Щ鍔ㄦ椂錛屼笉闇瑕佸仛姣旇緝銆傛瘡嬈$Щ鍔ㄥ埌涓嬬駭鍒嗘敮鑺傜偣闇瑕丱(1)鏃墮棿銆傚彟澶栵紝姣忔縐誨姩閮戒細浣縨inDistance鍑忓皯1.鐢變簬寮濮嬫椂 minDistance涓?,騫朵笖姘歌繙涓嶄細灝忎簬0,(b)娑堣楃殑鏃墮棿鏄疧(n + n嬈℃彃鍏ユ搷浣滀腑minDistance澧炲姞鐨勬繪暟).

(c) 閮ㄥ垎涓紝紜畾lastBranchIndex(i,i) 璺?i + activeLength + minDistance鏄惁鐩哥瓑闇瑕佺殑鏃墮棿鏄疧(1)銆傝繖鍙湁鍦╩inDistance = 0鎴栬呬綅浜巗uffix(i)鐨刟ctiveLength + minDistance + 1浣嶇疆鐨勫瓧絎璺熸椿鍔ㄨ妭鐐圭殑鍚堥傜殑杈圭殑minDistance + 1浣嶇疆鐨勫瓧絎︿笉鍚岀殑鏃跺欐墠婊¤凍銆傚綋lastBranchIndex(i,i) != i + activeLength + minDistance鏃訛紝lastBranchIndex(i,i) > i + activeLength + minDistance錛宭astBranchIndex(i,i)鐨勫奸氳繃瀵瑰悗緙瀛楃鍜岃竟鐨勫瓧絎︿箣闂村仛涓緋誨垪鐨勬瘮杈冩潵紜畾銆傛瘡榪涜涓嬈¤繖縐嶆瘮 杈冿紝minDistance鍔?.鏈畻娉曚腑錛屽彧鏈夊湪榪欑鎯呮櫙涓嬶紝minDistance鎵嶄細澧炲姞銆傜敱浜巑inDistance鐨勬瘡嬈¢掑閮芥槸S鐨勬柊鐨勪綅緗? 錛堜篃灝辨槸姝や綅緗紑濮嬬殑瀛楃榪樻湭姣旇緝榪囩殑浣嶇疆錛夌殑瀛楃鍜岃竟鐨勫瓧絎︾浉絳夌殑鎯呭艦鐨勭粨鏋滐紝鍥犳鍦╪嬈℃彃鍏ヤ腑錛宮inDistance澧炲姞鐨勬繪暟鏄疧(n)銆?/n錛宭astbranchindex(i,i)>

姣忔鎻掑叆鏃訛紝(d)娑堣楃殑鏃墮棿鏄疧(r)錛屽洜涓烘垜浠渶瑕佸垵濮嬪寲瑕佸垱寤虹殑鍒嗘敮鑺傜偣鐨凮(r)涓瓧孌點傚洜姝ゆ楠?d)娑堣楃殑鎬葷殑鏃墮棿鏄疧(nr)銆?/n錛宭astbranchindex(i,i)>

鍥犳錛屽垱寤哄悗緙鏍戞秷鑰楃殑鎬葷殑鏃墮棿鏄疧(nr)銆傚鏋滃亣瀹氬瓧絎﹂泦鐨勫ぇ灝弐鏄父鏁幫紝綆楁硶鐨勫鏉傚害灝辨槸O(n)銆?/n錛宭astbranchindex(i,i)>

鍙湁鍦ㄥ瓧絎﹂泦鐨勫ぇ灝弐寰堝皬鐨勬儏鍐典笅錛屾墠鎺ㄨ崘姣忎釜鍒嗘敮鑺傜偣鏈塺涓寚鍚戝瓙鑺傜偣鐨勫瓧孌點傚綋瀛楃闆嗗緢澶х殑鏃跺欙紙鍙兘浼氳窡n涓鏍峰ぇ錛岃繖鏃朵笂榪扮畻娉曠殑澶嶆潅搴︽槸O(n^2)錛夛紝浣跨敤鍝堝笇琛?/a>鑳藉寰楀埌O(n)澶嶆潅搴︾殑綆楁硶銆傜┖闂村鏉傚害鏈塐(nr)鍙樹負O(n)銆?/n錛宭astbranchindex(i,i)>

榪欓噷鏈変竴涓垎娌葷畻娉曞疄鐜扮殑鍚庣紑鏍戯紝鏃墮棿鍜岀┖闂村鏉傚害閮芥槸O(n)錛堝嵆浣垮瓧絎﹂泦鐨勫ぇ灝忔槸O(n)錛夈?/n錛宭astbranchindex(i,i)>


References and Selected Readings


  1. Department of Energy's Web site for the human genomics project
  2. Biocomputing Hypertext Coursebook.


Linear time algorithms to search for a single pattern in a given string can be found in most algorithm's texts. See, for example, the texts:
  1. Computer Algorithms, by E. Horowitz, S. Sahni, and S. Rajasekeran, Computer Science Press, New York, 1998.
  2. Introduction to Algorithms, by T. Cormen, C. Leiserson, and R. Rivest, McGraw-Hill Book Company, New York, 1992.


For more on suffix tree construction, see the papers:
  1. ``A space economical suffix tree construction algorithm,'' by E. McCreight, Journal of the ACM, 23, 2, 1976, 262-272.
  2. ``On-line construction of suffix trees,'' by E. Ukkonen, Algorithmica, 14, 3, 1995, 249-260.
  3. Fast string searching with suffix trees,'' by M. Nelson, Dr. Dobb's Journal, August 1996.
  4. Optimal suffix tree construction with large alphabets, by M. Farach, IEEE Symposium on the Foundations of Computer Science, 1997.


You can download C++ code to construct a suffix tree from http://www.ddj.com/ftp/1996/1996.08/suffix.zip. This code, developed by M. Nelson, is described in paper 3 above.


瀛i槼 2008-07-12 10:44 鍙戣〃璇勮
]]>
C++緙栫爜椋庢牸鎸囧崡http://www.shnenglu.com/lucency/archive/2008/05/23/50829.html瀛i槼瀛i槼Fri, 23 May 2008 01:09:00 GMThttp://www.shnenglu.com/lucency/archive/2008/05/23/50829.htmlhttp://www.shnenglu.com/lucency/comments/50829.htmlhttp://www.shnenglu.com/lucency/archive/2008/05/23/50829.html#Feedback0http://www.shnenglu.com/lucency/comments/commentRss/50829.htmlhttp://www.shnenglu.com/lucency/services/trackbacks/50829.htmlC++緙栫爜椋庢牸鎸囧崡

C++ Programming Style Guidelines


瀛i槼 2008-05-23 09:09 鍙戣〃璇勮
]]>
ecb symboldef VS. si context windowhttp://www.shnenglu.com/lucency/archive/2008/04/21/47726.html瀛i槼瀛i槼Mon, 21 Apr 2008 05:02:00 GMThttp://www.shnenglu.com/lucency/archive/2008/04/21/47726.htmlhttp://www.shnenglu.com/lucency/comments/47726.htmlhttp://www.shnenglu.com/lucency/archive/2008/04/21/47726.html#Feedback0http://www.shnenglu.com/lucency/comments/commentRss/47726.htmlhttp://www.shnenglu.com/lucency/services/trackbacks/47726.htmlZoundryDocument

涓鐩磋寰梥ource insight涓樉紺哄彉閲忓拰鍑芥暟瀹氫箟鐨刢ontext window寰堝ソ,鏄ㄥぉ紿佺劧鍙戠幇鍘熸潵ecb(Emacs Code Browser)涓篃鏈変釜綾諱技鐨勪笢瑗?褰搇ayout鎹㈡垚left_symboldef鍚?宸︿笅紿楀彛灝辨槸浜?鍟ヤ篃涓嶈浜?璐翠釜鍥懼惂.


榪欎釜鏄垜鏍規嵁鍘熷厛鐨刲ayout left_symboldef鏀圭殑.鍙互鐪嬪埌宸﹁竟閭d竴鏍?涓婇潰鏄嚱鏁板暐鐨勫垪琛?涓嬮潰灝辨槸絎﹀彿瀹氫箟紿楀彛.鏈変袱鐐逛笉鐖界殑鏄鍙峰畾涔夌獥鍙f病娉曞崟鐙斁鍦ㄤ笅闈?涓昏鏄斁鍦ㄥ乏杈圭殑璇?鍑芥暟鍘熷瀷姣旇緝闀跨殑灝辨病娉曞畬鏁存樉紺?浜屾槸涓嶈兘鍍弒i閭f牱鍙屽嚮璺寵漿.涓嶈繃涔熶笉閿欎簡,璺寵漿鐢╟scope涔熷鏄?

ps:鎴戠殑ecb鍑芥暟鍒楄〃涓病娉曟樉紺哄弬鏁扮被鍨?鍝綅濡傛灉鐭ラ亾楹葷儲璇翠竴涓嬪搱,璋簡!



瀛i槼 2008-04-21 13:02 鍙戣〃璇勮
]]>
鍏充簬嫻佸拰緙撳啿鍖虹殑鐞嗚Вhttp://www.shnenglu.com/lucency/archive/2008/04/07/46419.html瀛i槼瀛i槼Mon, 07 Apr 2008 04:48:00 GMThttp://www.shnenglu.com/lucency/archive/2008/04/07/46419.htmlhttp://www.shnenglu.com/lucency/comments/46419.htmlhttp://www.shnenglu.com/lucency/archive/2008/04/07/46419.html#Feedback4http://www.shnenglu.com/lucency/comments/commentRss/46419.htmlhttp://www.shnenglu.com/lucency/services/trackbacks/46419.html

0. 搴忔洸

鍐欒繖綃囩煭鏂囩殑璧峰洜鏄?鍓嶄袱澶╂兂鍘誨ぉ澶х殑acm鍦ㄧ嚎緋葷粺鎵懼嚑閬撻鍋氬仛銆備負浠涔堝憿?鍥犱負鏈漢澶╁ぇ姣曚笟,榪欎釜澶╁ぇ鍛㈠彲鏄腑鍥芥渶鏃╃殑澶у,鍘熷悕鍖楁磱澶у鍫?榪欏彲緇濆鏄揣鐪熶環瀹炵殑絎竴鎵澶у銆傜粰澶у鎺ㄨ崘鎺ㄨ崘鍟?瀛﹂閭f槸鐩稿綋鐨勫ソ銆?/p>

鎵浜?榪樻槸鍥炲埌鏈潵鐨勮瘽棰樹笂銆備笂浜哸cm緋葷粺涔嬪悗,灝卞厛鐪嬩簡1001銆傞偅閬撻鐨勬剰鎬濇槸杈撳叆涓浜涙鏁存暟(浠OF緇撴潫),鎶婂搴旂殑瀛楃杈撳嚭銆傝繖涓畝鍗?紼嬪簭寰堝揩灝卞嚭鏉ヤ簡:


 

#include <stdio.h>
int main()
{
int c;
while(scanf("%d"&c) != EOF)
{
putchar(c);
}
return 0;
}

 


紼嬪簭榪愯,杈撳叆103 102 105 107<enter>

杈撳嚭gfik銆?/p>

褰撴椂榪愯瀹屼箣鍚庨┈涓婃兂,涓轟粈涔堜笉鏄緭鍏ヤ竴涓暟瀛楅┈涓婅緭鍑轟竴涓瓧絎﹀憿,鍥犱負鐪嬬▼搴忕‘瀹炴槸榪欐牱鐨勯昏緫,鍙涓嶆槸EOF,灝變細杈撳嚭銆傚張涓鎯?瀵逛簡,鏄紦鍐茬殑闂銆傛兂璧鋒潵APUE閲岃竟璇村緱stdin搴旇鏄緙撳啿鐨?鍙﹀,鍙互鐢╯etbuf,setvbuf璁懼畾嫻佺殑緙撳啿銆備簬鏄兂灝唖tdin璁炬垚鏃犵紦鍐茬殑銆備簬鏄▼搴忓彉鎴愯繖鏍?


#include <stdio.h>
int main()
{
int c;
setbuf(stdin, NULL);
while(scanf("%d"&c) != EOF)
{
putchar(c);
}
return 0;
}


鍙槸緙栬瘧榪愯,榪樻槸鑰佹牱瀛?娌℃湁鍙樺寲銆傛兂浜嗘兂,娌℃兂鍑烘槸鍟ュ師鍥?浜庢槸寮濮媑oogle鍜孉PUE銆傜粓浜庣畻鏄槑鐧戒簡浜?鏁寸悊鍦ㄨ繖鍎褲?/p>

澹版槑錛?/p>

鏈枃寰堝ぇ閮ㄥ垎鍐呭鏉ヨ嚜APUE錛嶏紞UNIX鐜楂樼駭緙栫▼銆?/p>

1. 緙撳啿綾誨瀷銆?/p>

鏍囧噯搴撴彁渚涚紦鍐叉槸涓轟簡鍑忓皯瀵箁ead鍜寃rite鐨勮皟鐢ㄣ傛彁渚涚殑緙撳啿鏈変笁縐嶇被鍨?鏁寸悊鑷狝PUE):

  • 鍏ㄧ紦鍐層?

鍦ㄨ繖縐嶆儏鍐典笅,瀹為檯鐨処/O鎿嶄綔鍙湁鍦ㄧ紦鍐插尯琚~婊′簡涔嬪悗鎵嶄細榪涜銆傚椹葷暀鍦ㄧ鐩樹笂鐨勬枃浠剁殑鎿嶄綔涓鑸槸鏈夋爣鍑咺/O搴撴彁渚涘叏緙撳啿銆傜紦鍐插尯涓鑸槸鍦ㄧ涓嬈″嫻佽繘琛孖/O鎿嶄綔鏃?鐢辨爣鍑咺/O鍑芥暟璋冪敤malloc鍑芥暟鍒嗛厤寰楀埌鐨勩?/p>

鏈flush鎻忚堪浜嗘爣鍑咺/O緙撳啿鐨勫啓鎿嶄綔銆傜紦鍐插尯鍙互鐢辨爣鍑咺/O鍑芥暟鑷姩flush(渚嬪緙撳啿鍖烘弧鐨勬椂鍊?;鎴栬呮垜浠嫻佽皟鐢╢flush鍑芥暟銆?/p>

  • 琛岀紦鍐?/div>

鍦ㄨ繖縐嶆儏鍐典笅,鍙湁鍦ㄨ緭鍏?杈撳嚭涓亣鍒版崲琛岀鐨勬椂鍊?鎵嶄細鎵ц瀹為檯鐨処/O鎿嶄綔銆傝繖鍏佽鎴戜滑涓嬈″啓涓涓瓧絎?浣嗘槸鍙湁鍦ㄥ啓瀹屼竴琛屼箣鍚庢墠鍋欼/O鎿嶄綔銆備竴鑸殑,娑夊強鍒扮粓绔殑嫻?-渚嬪鏍囨敞杈撳叆(stdin)鍜屾爣鍑嗚緭鍑?stdout)--鏄緙撳啿鐨勩?/p>

  • 鏃犵紦鍐?/div>

鏍囧噯I/O搴撲笉緙撳瓨瀛楃銆?span style="color: #ff0000;">闇瑕佹敞鎰忕殑鏄?鏍囧噯搴撲笉緙撳瓨騫朵笉鎰忓懗鐫鎿嶄綔緋葷粺鎴栬呰澶囬┍鍔ㄤ笉緙撳瓨銆?br>

ISO C瑕佹眰:

  • 褰撲笖浠呭綋涓嶆秹鍙婁氦浜掕澶囨椂,鏍囧噯杈撳叆鍜屾爣鍑嗚緭鍑烘槸鍏ㄧ紦瀛樼殑銆?/span>
  • 鏍囧噯閿欒緇濆涓嶆槸鍏ㄧ紦瀛樼殑銆?/span>

浣嗘槸,榪欏茍娌℃湁鍛婅瘔鎴戜滑褰撴爣鍑嗚緭鍏?杈撳嚭鍦ㄦ秹鍙婁氦浜掕澶囨椂,瀹冧滑鏄棤緙撳瓨鐨勮繕鏄緙撳瓨鐨?涔熸病鏈夊憡璇夋垜浠爣鍑嗛敊璇簲璇ユ槸琛岀紦瀛樼殑榪樻槸鏃犵紦瀛樼殑銆備笉榪?澶у鏁板疄鐜伴粯璁ょ殑緙撳瓨綾誨瀷鏄繖鏍風殑:

  • 鏍囧噯閿欒鎬繪槸鏃犵紦瀛樼殑銆?/span>
  • 瀵逛簬鎵鏈夌殑鍏朵粬嫻佹潵璇?濡傛灉瀹冧滑娑夊強鍒頒氦浜掕澶?閭d箞灝辨槸琛岀紦瀛樼殑;鍚﹀垯鏄叏緙撳瓨鐨勩?/span>

2. 鏀瑰彉榛樿緙撳瓨綾誨瀷

鍙互閫氳繃涓嬮潰鐨勫嚱鏁版敼鍙樼紦瀛樼被鍨?鎽樿嚜APUE):

void setbuf(FILE *restrict fp, char *restrict buf);
int setvbuf(FILE *restrict fp, char *restrict buf, int mode, size_t size);

榪欎簺鍑芥暟蹇呴』鍦ㄦ祦鎵撳紑涔嬪悗銆佷絾鏄湭瀵規祦鍋氫換浣曟搷浣滀箣鍓嶈璋冪敤(鍥犱負姣忎釜鍑芥暟閮介渶瑕佷竴涓湁鏁堢殑鏂囦歡鎸囬拡浣滀負絎竴涓弬鏁?銆?/span>

鍒╃敤setbuf錛屽彲浠ユ墦寮鎴栬呭叧闂紦瀛樸備負浜嗘墦寮緙撳瓨錛宐uf鍙傛暟蹇呴』涓涓ぇ灝忎負BUFSIZ鐨勭紦瀛橈紝BUFSIZ鏄畾涔夊湪stdio銆俬涓殑甯擱噺銆?amp;amp;lt;&amp;lt;ISO/IEC 9899&amp;gt;&amp;gt;瑕佹眰錛欱UFSIZ鑷沖皯涓?56銆傚鏋滆鍏抽棴緙撳瓨錛屽彲浠ュ皢buf璁炬垚NULL銆?/span>

鍒╃敤setvbuf錛屾垜浠彲浠ヨ瀹氱紦瀛樼被鍨嬨傝繖鏄氳繃mode鍙傛暟鎸囧畾鐨勩?/span>

鍏充簬榪欎袱涓嚱鏁幫紝鍙互鐪嬩笅琛紙鎽樿嚜APUE錛夛細


Function

mode

buf

Buffer and length

Type of buffering

setbuf

non-null

user buf of length BUFSIZ

fully buffered or line buffered

NULL

(no buffer)

unbuffered

setvbuf

_IOLBF

non-null

user buf of length size

fully buffered

NULL

system buffer of appropriate length

_IOFBF

non-null

user buf of length size

line buffered

NULL

system buffer of appropriate length

_IONBF

(ignored)

(no buffer)

unbuffered

闇瑕佹敞鎰忕殑鏄細濡傛灉鍦ㄥ嚱鏁板唴涓烘祦鍒嗛厤浜嗚嚜鍔ㄥ彉閲忎綔涓虹紦瀛橈紝閭d箞鍦ㄩ鍑轟箣鍓嶉渶瑕佸皢嫻佸叧闂傚洜姝ゆ渶濂借緋葷粺鑷繁鍒嗛厤緙撳瓨錛岃繖浜涚紦瀛樺湪嫻佸叧闂殑鏃跺欎細鑷姩琚噴鏀俱?/span>


3.濡傛灉娓呯悊杈撳叆緙撳瓨

鍏充簬榪欑偣鍙互鍙傜湅comp.lang.c FAQ鐨凲uestion12.26b:

Q: If fflush won't work, what can I use to flush input?

A: It depends on what you're trying to do. If you're trying to get rid of an unread newline or other unexpected input after calling scanf (see questions 12.18a-12.19), you really need to rewrite or replace the call to scanf (see question 12.20). Alternatively, you can consume the rest of a partially-read line with a simple code fragment like

while((c = getchar()) != '\n' &amp;&amp; c != EOF)
/* discard */ ;

(You may also be able to use the curses flushinp function.)

There is no standard way to discard unread characters from a stdio input stream. Some vendors do implement fflush so that fflush(stdin) discards unread characters, although portable programs cannot depend on this. (Some versions of the stdio library implement fpurge or fabort calls which do the same thing, but these aren't standard, either.) Note, too, that flushing stdio input buffers is not necessarily sufficient: unread characters can also accumulate in other, OS-level input buffers. If you're trying to actively discard input (perhaps in anticipation of issuing an unexpected prompt to confirm a destructive action, for which an accidentally-typed ``y'' could be disastrous), you'll have to use a system-specific technique to detect the presence of typed-ahead input; see questions 19.1 and 19.2. Keep in mind that users can become frustrated if you discard input that happened to be typed too quickly.

References: ISO Sec. 7.9.5.2
H&amp;S Sec. 15.2

4. 鍑犵偣闇瑕佹敞鎰忕殑鍦版柟

  • 瀵硅緭鍏ユ祦榪涜fflush鎿嶄綔鏄棤瀹氫箟鐨勩?/span>
  • 鏃犵紦瀛樺茍涓嶆剰鍛崇潃涓涓釜鐨勯偅鏍峰鐞嗚緭鍏ワ紝鑰屾槸璇村綋鎿嶄綔緋葷粺榪斿洖瀹冧滑鏃訛紝瀵逛簬鏍囧噯搴撳嚱鏁版潵璇村畠浠槸绔嬪嵆鍙敤鐨勩傚洜涓鴻繕鍙兘鏈夋搷浣滅郴緇熺駭鐢氳嚦鏄‖浠剁駭鐨勭紦瀛橈紝榪欎簺騫朵笉鏄痵etbuf鍙互鎺у埗鐨勩?/span>
  • 鍙﹀鍙互鍙傝?a >榪欓噷錛堟垜灝辨槸鏈鍏堜粠榪欓噷寮濮嬬湅鐨勶級銆傝繕鏈?a >榪欓噷銆傛垜浠庡悗闈㈤偅涓摼鎺ユ憳褰曚竴浜涢噸瑕佺殑涓嬫潵錛?/span>

setbuf() has to do with the delivery of bytes between the
C library FILE* management layer and the OS I/O layer.

Calls to fread(), fgets(), fgetc(), and getchar() work within
whatever FILE* buffered data is available, and when that data
is exhausted, the calls request that the FILE* buffer be refilled
by the system I/O layer.

When full buffering is turned on, that refill operation results in the
FILE* layer requesting that the operating system hand it a full
buffer's worth of data; when buffering is turned off, that
refill operation results in the FILE* layer requesting that the
operating system return a single character.

...setting an input stream to be unbuffered
does NOT tell the operating system to tell the device driver
to go into any kind of "raw" single-character mode. There are
system-specific calls such as ioctl() and tcsetterm() that
control what the device driver will do.







瀛i槼 2008-04-07 12:48 鍙戣〃璇勮
]]>
makefile絎旇http://www.shnenglu.com/lucency/archive/2008/02/24/43160.html瀛i槼瀛i槼Sun, 24 Feb 2008 03:23:00 GMThttp://www.shnenglu.com/lucency/archive/2008/02/24/43160.htmlhttp://www.shnenglu.com/lucency/comments/43160.htmlhttp://www.shnenglu.com/lucency/archive/2008/02/24/43160.html#Feedback0http://www.shnenglu.com/lucency/comments/commentRss/43160.htmlhttp://www.shnenglu.com/lucency/services/trackbacks/43160.html>銆傚彟澶栫綉涓婃湁涓綃囥婅窡鎴戜竴璧峰啓makefile銆嬩篃寰堝ソ銆?br />
    makefile瑙勫垯鍒嗕負涓夐儴鍒嗭細鐩爣(target)銆佹潯浠?prerequisite)銆佸懡浠?commands)銆?br />    target:prereq1...prereqn
       commans

1.鑷姩鍙橀噺

    $@錛氫唬琛ㄧ洰鏍囨枃浠跺悕
    $%錛歍he filename element of an archive member specification.
    $<錛氭潯浠跺垪琛ㄤ腑鐨勭涓涓潯浠剁殑鏂囦歡鍚?br />    $?錛氭潯浠跺垪琛ㄤ腑鎵鏈夋瘮鐩爣鏂扮殑閭d簺鏉′歡鐨勬枃浠跺悕錛屼互絀烘牸鍒嗗壊
    $^錛氭潯浠跺垪琛ㄤ腑鎵鏈夋潯浠剁殑鏂囦歡鍚嶏紝浠ョ┖鏍煎垎鍓層傚鏋滃垪琛ㄤ腑鏈夐噸澶嶇殑鏉′歡錛屽垯浼氳鍒犳帀銆?br />    $+錛氳窡$^綾諱技錛屽尯鍒湪涓嶄細鍘繪帀閲嶅鐨勬潯浠躲?br />    $*錛氱洰鏍囨枃浠跺悕鐨勮瘝騫查儴鍒?鍘繪帀鎵╁睍鍚嶅墿涓嬬殑閮ㄥ垎)

    鑷姩鍙橀噺鍙兘鐢ㄥ湪瑙勫垯鐨勫懡浠ら儴鍒嗭紝鍥犱負榪欎簺鍙橀噺鏄痬ake鍖歸厤鍒拌鍒欑殑鐩爣鍜屾潯浠跺悗鎵嶈緗肩殑銆?br />    涓句釜渚嬪瓙璇存槑涓涓嬨傚亣璁炬煇涓伐紼嬫湁涓変釜鏂囦歡錛歝al.cpp錛宑al.h錛宼est.cpp(涓嬮潰鍐嶆湁璇存槑鏃朵篃浠ユ涓轟緥)銆俶akefile濡備笅錛?br />        OBJS=test.o cal.o cal.o

        TARGET=cal.exe

        all:$(TARGET)

        $(TARGET):$(OBJS)
            @echo $@
            @echo $<
            @echo $^
            @echo $?
            @echo $+
            @echo $%
            @echo $*
    杈撳嚭涓猴細
            cal.exe
            test.o
            test.o cal.o
            test.o cal.o
            test.o cal.o cal.o
            ECHO is off.
            ECHO is off.
    鑷充簬鏈鍚庝袱涓負浠涔堜細榪欐牱杈撳嚭鎴戣繕涓嶅お娓呮錛屾湁娓呮鍦伴夯鐑﹀憡璇夋垜涓涓嬭繖涓や釜鎬庝箞鐢ㄣ傚厛璋㈣阿浜?/b>銆?br />
2.妯″紡瑙勫垯
    妯″紡瑙勫垯涔熸槸瑙勫垯錛屼篃瑕佹弧瓚砿ake鐨勮鍒欏艦寮忥紝鍒嗕負鐩爣銆佹潯浠躲佸懡浠や笁涓儴鍒嗐傚彧鏄洰鏍囥佹潯浠朵腑鐨勬枃浠跺悕鐨勮瘝騫查儴鍒嗙敤%浠f浛浜嗭紝榪欎釜%璺焥hell涓殑*綾諱技錛屼唬琛ㄤ換鎰忛暱搴︾殑瀛楃涓層傝繕浠ヤ笂闈㈣寰楀伐紼嬩負渚嬶紝makefile濡備笅錛?br />        CPPFLAGS= -g
        CC=g++

        test:cal.o test.o
        cal.o:cal.h
    make鐨勬椂鍊欙紝杈撳嚭濡備笅鍐呭錛?br />        g++  -g  -c -o test.o test.cpp
        g++  -g  -c -o cal.o cal.cpp
        g++   test.o cal.o   -o test
    榪欎釜makefile涔嬫墍浠ヨ兘澶熸紜澶勭悊錛屾槸鍥犱負make鍐呭緩浜嗕竴浜涜鍒欍備緥濡傦細
        %.o: %.c
            $(COMPILE.c) $(OUTPUT_OPTION) $<
        %.o: %.cpp
            $(COMPILE.cpp) $(OUTPUT_OPTION) $<
    浠ュ強
        %: %.o
            $(LINK.o) $^ $(LOADLIBES) $(LDLIBS) -o $@
    榪欎簺瑙勫垯閲岄潰鐨?鍙橀噺閮芥槸make鐨勬爣鍑嗗彉閲?榪樻湁涓婇潰鐨凜PPFLAGS,CC涔熸槸銆傚彟澶栬繕鏈変竴浜涘埆鐨?錛岃繖浜涙爣鍑嗗彉閲忔湁鐨勬湁榛樿鍊?渚嬪CC鐨勯粯璁ゅ兼槸cc)錛屾湁鐨勬病鏈夈俶ake鍦ㄥ鐞唌akefile鏂囦歡鏃訛紝濡傛灉娌℃湁鏄懼紡鐨勮鍒欙紝閭d箞灝變細鏌ユ壘鏄惁鏈夐殣寮忕殑鍙敤瑙勫垯錛屽鏋滄壘鍒板氨浼氬埄鐢ㄩ殣寮忚鍒欐潵鐢熸垚鐩爣銆?br />
    2.1闈欐佹ā寮忚鍒?br />       闈欐佹ā寮忚鍒欐寚鐨勬槸綾諱技涓嬮潰鐨勮鍒欙細
        $(OBJECTS): %.o: %c
            $(CC) -c $(CFLAGS) $< -o $@
       榪欒窡涓婇潰鐨勬ā寮忚鍒欑被浼鹼紝涓嶅悓鍦ㄤ簬灝嗚鍒欑殑閫傜敤鑼冨洿闄愬埗鍦ㄤ簡$(OBJECTS)銆備篃灝辨槸鍙拡瀵硅繖浜涚洰鏍囨潵搴旂敤瑙勫垯銆?br />
    2.2鍚庣紑瑙勫垯
       鍚庣紑瑙勫垯鏄寚鐢ㄤ竴涓垨鑰呬袱涓悗緙榪炴帴璧鋒潵浣滀負鐩爣錛屽悓鏃剁渷鐣ユ帀鏉′歡閮ㄥ垎銆傚涓嬶細
       .c.o:
           $(COMPILE.c) $(OUTPUT_OPTION) $<
       瀹規槗娣鋒穯鐨勫湴鏂規槸鏉′歡鍚庣紑鍦ㄥ墠錛岀洰鏍囧悗緙鍦ㄥ悗銆?br />       榪欒窡涓婇潰鐨勮鍒欙細
           %.o: %.c
               $(COMPILE.c) $(OUTPUT_OPTION) $<
       鍔熻兘鏄竴鏍風殑錛屽彧鏄負浜嗗吋瀹逛竴浜涜佺殑make緋葷粺銆?br />       闇瑕佹敞鎰忕殑鏄紝榪欓噷鐢ㄥ埌鐨勫悗緙蹇呴』鍦ㄥ凡鐭ュ悗緙鍒楄〃閲岄潰銆傛湁涓笓鐢ㄧ殑鐩爣(target)鈥斺?SUFFIXES鈥斺旂敤鏉ヨ瀹氬悗緙鍒楄〃銆備緥濡傦細.SUFFIXES錛?pdf .o .c 銆傝?SUFFIXES:錛堜篃灝辨槸鍚庨潰鍒楄〃涓虹┖錛夌敤鏉ユ竻絀哄悗緙鍒楄〃銆?br />

3.鑷姩渚濊禆鐢熸垚
    榪樻病鍙戠幇榪欎釜鍦ㄥ疄闄呭簲鐢ㄤ腑鏈夊鏂逛究錛屾湁鍏磋叮鐨勫彲浠ョ湅鐪嬫垜寮濮嬫帹鑽愮殑涓や釜鏂囨。銆?br />

瀛i槼 2008-02-24 11:23 鍙戣〃璇勮
]]>
緇堜簬浣撲細鍒癳macs姣攙im鏂逛究鐨勫湴鏂癸紒http://www.shnenglu.com/lucency/archive/2008/02/16/42818.html瀛i槼瀛i槼Sat, 16 Feb 2008 15:48:00 GMThttp://www.shnenglu.com/lucency/archive/2008/02/16/42818.htmlhttp://www.shnenglu.com/lucency/comments/42818.htmlhttp://www.shnenglu.com/lucency/archive/2008/02/16/42818.html#Feedback0http://www.shnenglu.com/lucency/comments/commentRss/42818.htmlhttp://www.shnenglu.com/lucency/services/trackbacks/42818.html    鍒氬垰璇曠敤浜嗕竴涓嬪湪emacs閲岀敤gdb璋冭瘯紼嬪簭錛屼笉鏄竴鑸殑鏂逛究鍟婏紝鍛靛懙銆傛湁鐩磋鐨勭晫闈紝鑰屼笖榪樻湁console瀵筭db鏂逛究鐨勬帶鍒訛紝浣跨敤浜嗗ソ鍑犲ぉemacs浜嗭紝瑙夊緱榪欐槸灝戞湁鐨勬瘮vim鏂逛究鐨勫湴鏂廣?/p>

    褰撶劧錛屽崟綰敤鏉ョ紪杈戞枃浠剁殑璇濊繕鏄痸im鏂逛究涓浜涳紝姣曠珶vim鍖哄垎妯″紡錛屾湁浜涙搷浣滃彲浠ョ敤寰堝皯鐨勬寜閿揩閫熺殑瀹屾垚銆?/p>

    涓嶇煡閬揺macs鐨勫畯褰曞埗鍔熻兘濡備綍銆傛劅瑙塿im閲岄潰鐨勫畯鐪熺殑鏄お濂界敤浜嗭紝寮勫緱鎴戝緢鏄垗涓嶅緱vim銆傝鏄湁涓紪杈戝櫒鑳介泦鍚坴im鐨勯珮鏁堝揩鎹瘋窡emacs鐨勫己澶ф墿灞曡兘鍔涘氨濂戒簡銆?/p>

瀛i槼 2008-02-16 23:48 鍙戣〃璇勮
]]>
Blog apihttp://www.shnenglu.com/lucency/archive/2008/02/16/42817.html瀛i槼瀛i槼Sat, 16 Feb 2008 15:39:00 GMThttp://www.shnenglu.com/lucency/archive/2008/02/16/42817.htmlhttp://www.shnenglu.com/lucency/comments/42817.htmlhttp://www.shnenglu.com/lucency/archive/2008/02/16/42817.html#Feedback0http://www.shnenglu.com/lucency/comments/commentRss/42817.htmlhttp://www.shnenglu.com/lucency/services/trackbacks/42817.htmlcpp blog api


http://www.shnenglu.com/lucency/services/metaweblog.aspx



google blog api


http://www.blogger.com:80/feeds/default/blogs



瀛i槼 2008-02-16 23:39 鍙戣〃璇勮
]]>
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
      <noscript id="pjuwb"></noscript>
            <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
              <dd id="pjuwb"></dd>
              <abbr id="pjuwb"></abbr>
              日韩图片一区| 久久人人爽人人| 亚洲精选一区二区| 在线视频亚洲欧美| 亚洲欧美另类综合偷拍| 欧美一区二区三区在线看| 久久久之久亚州精品露出| 免费欧美在线视频| 亚洲久久成人| 午夜免费日韩视频| 欧美成人免费在线视频| 欧美性开放视频| 红桃视频国产精品| 亚洲作爱视频| 久久精品成人一区二区三区蜜臀| 免费视频一区| 亚洲小少妇裸体bbw| 另类成人小视频在线| 国产精品国产a级| 136国产福利精品导航网址应用| 日韩亚洲不卡在线| 久久久久久一区二区| 亚洲精品女av网站| 亚洲高清视频在线| 欧美一站二站| 欧美精品一区二区三| 国模大胆一区二区三区| 一区二区免费在线播放| 可以看av的网站久久看| 宅男在线国产精品| 欧美国产一区二区三区激情无套| 国产日产欧产精品推荐色| 99re6这里只有精品| 久久麻豆一区二区| 亚洲女性喷水在线观看一区| 欧美日本亚洲韩国国产| 国产在线高清精品| 亚洲综合国产精品| 亚洲日本电影| 麻豆久久久9性大片| 国产一区二区三区四区| 亚洲综合久久久久| 亚洲伦理网站| 欧美日韩国产999| 亚洲乱码国产乱码精品精可以看 | 欧美伊人久久大香线蕉综合69| 欧美日韩不卡合集视频| 亚洲人午夜精品| 蜜臀av一级做a爰片久久| 亚洲性视频网址| 欧美日韩在线视频首页| 99re成人精品视频| 亚洲国产欧美一区二区三区久久 | 日韩视频一区二区在线观看| 模特精品在线| 亚洲精美视频| 亚洲电影在线观看| 男女激情视频一区| 亚洲人成7777| 亚洲国产日韩一级| 欧美国产精品v| 亚洲久色影视| 亚洲美女视频在线观看| 欧美日韩另类视频| 亚洲欧美日韩国产成人精品影院| 日韩一二三区视频| 国产精品女同互慰在线看| 午夜影视日本亚洲欧洲精品| 午夜精品久久久久99热蜜桃导演| 国产欧美一区二区三区久久| 久久久久久久欧美精品| 久久看片网站| 99精品国产福利在线观看免费| 亚洲精品影视在线观看| 国产精品进线69影院| 久久精品一区蜜桃臀影院| 久久久水蜜桃| 一区二区三区www| 亚洲一区日韩| 激情久久影院| 亚洲欧洲日本专区| 国产精品视频一二三| 狂野欧美激情性xxxx| 欧美国产视频在线| 欧美在线免费观看亚洲| 另类欧美日韩国产在线| 亚洲午夜三级在线| 久久精品网址| 亚洲视频福利| 久久婷婷国产综合尤物精品| 一本色道久久综合亚洲精品婷婷| 亚洲曰本av电影| 亚洲激情女人| 亚洲欧美激情一区二区| 亚洲国产精品成人久久综合一区| 99国产精品久久久久老师| 国内成人精品2018免费看 | 免费观看日韩| 欧美性淫爽ww久久久久无| 久久中文精品| 国产精品日韩高清| 91久久久精品| 伊人激情综合| 欧美吻胸吃奶大尺度电影| 亚洲网站视频| 久久中文在线| 久久精品视频亚洲| 欧美日韩精品二区第二页| 久久精品一区四区| 国产精品入口| 日韩视频中文| 亚洲精品国产精品乱码不99| 欧美怡红院视频| 午夜性色一区二区三区免费视频| 免费成人高清视频| 玖玖视频精品| 好看的日韩视频| 亚洲欧美www| 亚洲在线播放电影| 欧美精品二区三区四区免费看视频| 久久久久久高潮国产精品视| 国产精品久久久久久久久久直播 | 国产精品嫩草99a| 99国产欧美久久久精品| 91久久线看在观草草青青| 久久久成人精品| 免费成人高清| 在线观看一区欧美| 久久久精品国产一区二区三区 | 鲁大师影院一区二区三区| 国产欧美在线视频| 午夜伦欧美伦电影理论片| 欧美专区亚洲专区| 国产麻豆午夜三级精品| 亚洲一区二区三区影院| 小处雏高清一区二区三区| 国产精品日韩一区二区三区| 一区二区三区欧美日韩| 亚洲曰本av电影| 国产欧美日韩激情| 欧美在线一二三四区| 久久婷婷国产综合精品青草| 国内免费精品永久在线视频| 久久久之久亚州精品露出| 欧美黄色一区| 一区二区三区日韩| 国产精品毛片a∨一区二区三区| 中国av一区| 久久成人精品一区二区三区| 好吊妞这里只有精品| 麻豆精品国产91久久久久久| 最新日韩在线| 亚洲自拍啪啪| 伊人精品视频| 欧美日本国产精品| 亚洲综合电影一区二区三区| 久久精品国产免费观看| 亚洲高清在线视频| 欧美日韩视频免费播放| 亚洲免费网址| 欧美激情亚洲视频| 亚洲欧美日韩区| 曰本成人黄色| 欧美日韩一区在线观看| 欧美一区高清| 亚洲欧洲综合另类| 亚洲免费影院| 久久久国产精品一区| 亚洲欧洲精品一区二区| 国产精品久久久99| 久久亚洲一区| 国产精品99久久久久久www| 久久精品水蜜桃av综合天堂| 亚洲欧洲日本国产| 国产精品三级视频| 欧美成年人视频网站| 亚洲欧美日韩一区二区三区在线| 欧美成人蜜桃| 欧美一区二区在线播放| 亚洲美女免费精品视频在线观看| 国产精品乱人伦一区二区 | 久久成人国产精品| 9久re热视频在线精品| 老色批av在线精品| 亚洲欧美日韩视频一区| 亚洲人成久久| 黄色另类av| 国产欧美亚洲一区| 欧美视频一二三区| 欧美成人性生活| 久久九九国产| 欧美影院在线| 亚洲综合欧美日韩| 日韩午夜黄色| 亚洲激情啪啪| 亚洲国产日本| 欧美激情第五页| 美女视频网站黄色亚洲| 久久麻豆一区二区| 久久久久**毛片大全|