锘??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲免费观看高清在线观看 ,亚洲美女啪啪,亚洲欧美日韩一区http://m.shnenglu.com/softko/category/14124.html娣¤杽鍚嶅埄,淇韓鍏繪?/description>zh-cnWed, 22 Jun 2011 09:08:07 GMTWed, 22 Jun 2011 09:08:07 GMT60鍚勭鎺掑簭綆楁硶浠嬬粛http://m.shnenglu.com/softko/archive/2011/06/17/148828.htmleircQeircQFri, 17 Jun 2011 00:09:00 GMThttp://m.shnenglu.com/softko/archive/2011/06/17/148828.htmlhttp://m.shnenglu.com/softko/comments/148828.htmlhttp://m.shnenglu.com/softko/archive/2011/06/17/148828.html#Feedback0http://m.shnenglu.com/softko/comments/commentRss/148828.htmlhttp://m.shnenglu.com/softko/services/trackbacks/148828.html鎺掑簭綆楁硶鏄竴縐嶅熀鏈茍涓斿父鐢ㄧ殑綆楁硶銆傜敱浜庡疄闄呭伐浣滀腑澶勭悊鐨勬暟閲忓法澶э紝鎵浠ユ帓搴忕畻娉曞綆楁硶鏈韓鐨勯熷害瑕佹眰寰堥珮銆?br />
  鑰屼竴鑸垜浠墍璋撶殑綆楁硶鐨勬ц兘涓昏鏄寚綆楁硶鐨勫鏉傚害錛屼竴鑸敤O鏂規硶鏉ヨ〃紺恒傚湪鍚庨潰鎴戝皢緇欏嚭璇︾粏鐨勮鏄庛?br />
  瀵逛簬鎺掑簭鐨勭畻娉曟垜鎯沖厛鍋氫竴鐐圭畝鍗曠殑浠嬬粛錛屼篃鏄粰榪欑瘒鏂囩珷鐞嗕竴涓彁綰層?br />
  鎴戝皢鎸夌収綆楁硶鐨勫鏉傚害錛屼粠綆鍗曞埌闅炬潵鍒嗘瀽綆楁硶銆?br />
  絎竴閮ㄥ垎鏄畝鍗曟帓搴忕畻娉曪紝鍚庨潰浣犲皢鐪嬪埌浠栦滑鐨勫叡鍚岀偣鏄畻娉曞鏉傚害涓篛(N*N)錛堝洜涓烘病鏈変嬌鐢╳ord,鎵浠ユ棤娉曟墦鍑轟笂鏍囧拰涓嬫爣錛夈?br />
  絎簩閮ㄥ垎鏄珮綰ф帓搴忕畻娉曪紝澶嶆潅搴︿負O(Log2(N))銆傝繖閲屾垜浠彧浠嬬粛涓縐嶇畻娉曘傚彟澶栬繕鏈夊嚑縐嶇畻娉曞洜涓烘秹鍙婃爲涓庡爢鐨勬蹇碉紝鎵浠ヨ繖閲屼笉浜庤璁恒?br />
  絎笁閮ㄥ垎綾諱技鍔ㄨ剳絳嬨傝繖閲岀殑涓ょ綆楁硶騫朵笉鏄渶濂界殑錛堢敋鑷蟲湁鏈鎱㈢殑錛夛紝浣嗘槸綆楁硶鏈韓姣旇緝濂囩壒錛屽煎緱鍙傝冿紙緙栫▼鐨勮搴︼級銆傚悓鏃朵篃鍙互璁╂垜浠粠鍙﹀鐨勮搴︽潵璁よ瘑榪欎釜闂銆?br />
  絎洓閮ㄥ垎鏄垜閫佺粰澶у鐨勪竴涓鍚庣殑鐢滅偣——涓涓熀浜庢ā鏉跨殑閫氱敤蹇熸帓搴忋傜敱浜庢槸妯℃澘鍑芥暟鍙互瀵逛換浣曟暟鎹被鍨嬫帓搴忥紙鎶辨瓑錛岄噷闈嬌鐢ㄤ簡涓浜涜鍧涗笓瀹剁殑鍛㈢О錛夈?


  鐜板湪錛岃鎴戜滑寮濮嬪惂錛?
  
涓銆佺畝鍗曟帓搴忕畻娉?
鐢變簬紼嬪簭姣旇緝綆鍗曪紝鎵浠ユ病鏈夊姞浠涔堟敞閲娿傛墍鏈夌殑紼嬪簭閮界粰鍑轟簡瀹屾暣鐨勮繍琛屼唬鐮侊紝騫跺湪鎴戠殑VC鐜涓嬭繍琛岄氳繃銆傚洜涓烘病鏈夋秹鍙奙FC鍜學INDOWS鐨勫唴瀹癸紝鎵浠ュ湪BORLAND C++鐨勫鉤鍙頒笂搴旇涔熶笉浼氭湁浠涔堥棶棰樼殑銆傚湪浠g爜鐨勫悗闈㈢粰鍑轟簡榪愯榪囩▼紺烘剰錛屽笇鏈涘鐞嗚В鏈夊府鍔┿?

1.鍐掓場娉曪細
榪欐槸鏈鍘熷錛屼篃鏄紬鎵鍛ㄧ煡鐨勬渶鎱㈢殑綆楁硶浜嗐備粬鐨勫悕瀛楃殑鐢辨潵鍥犱負瀹冪殑宸ヤ綔鐪嬫潵璞℃槸鍐掓場錛?
#include <iostream.h>

void BubbleSort(int* pData,int Count)
{
  int iTemp;
  for(int i=1;i<Count;i++)
  {
    for(int j=Count-1;j>=i;j--)
    {
      if(pData[j]<pData[j-1])
      {
        iTemp = pData[j-1];
        pData[j-1] = pData[j];
        pData[j] = iTemp;
      }
    }
  }
}

void main()
{
  int data[] = {10,9,8,7,6,5,4};
  BubbleSort(data,7);
  for (int i=0;i<7;i++)
    cout<<data[i]<<" ";
  cout<<"\n";
}

鍊掑簭(鏈緋熸儏鍐?
絎竴杞細10,9,8,7->10,9,7,8->10,7,9,8->7,10,9,8(浜ゆ崲3嬈?
絎簩杞細7,10,9,8->7,10,8,9->7,8,10,9(浜ゆ崲2嬈?
絎竴杞細7,8,10,9->7,8,9,10(浜ゆ崲1嬈?
寰幆嬈℃暟錛?嬈?
浜ゆ崲嬈℃暟錛?嬈?

鍏朵粬錛?
絎竴杞細8,10,7,9->8,10,7,9->8,7,10,9->7,8,10,9(浜ゆ崲2嬈?
絎簩杞細7,8,10,9->7,8,10,9->7,8,10,9(浜ゆ崲0嬈?
絎竴杞細7,8,10,9->7,8,9,10(浜ゆ崲1嬈?
寰幆嬈℃暟錛?嬈?
浜ゆ崲嬈℃暟錛?嬈?

涓婇潰鎴戜滑緇欏嚭浜嗙▼搴忔錛岀幇鍦ㄦ垜浠垎鏋愬畠錛氳繖閲岋紝褰卞搷鎴戜滑綆楁硶鎬ц兘鐨勪富瑕侀儴鍒嗘槸寰幆鍜屼氦鎹紝 鏄劇劧錛屾鏁拌秺澶氾紝鎬ц兘灝辮秺宸備粠涓婇潰鐨勭▼搴忔垜浠彲浠ョ湅鍑哄驚鐜殑嬈℃暟鏄浐瀹氱殑錛屼負1+2+...+n-1銆?
鍐欐垚鍏紡灝辨槸1/2*(n-1)*n銆?
鐜板湪娉ㄦ剰錛屾垜浠粰鍑篛鏂規硶鐨勫畾涔夛細

  鑻ュ瓨鍦ㄤ竴甯擱噺K鍜岃搗鐐筺0錛屼嬌褰搉>=n0鏃訛紝鏈塮(n)<=K*g(n),鍒檉(n) = O(g(n))銆傦紙鍛靛懙錛屼笉瑕佽娌″濂芥暟瀛﹀憖錛屽浜庣紪紼嬫暟瀛︽槸闈炲父閲嶈鐨勶紒錛侊紒錛?

鐜板湪鎴戜滑鏉ョ湅1/2*(n-1)*n錛屽綋K=1/2錛宯0=1錛実(n)=n*n鏃訛紝1/2*(n-1)*n<=1/2*n*n=K*g(n)銆傛墍浠?n)=O(g(n))=O(n*n)銆傛墍浠ユ垜浠▼搴忓驚鐜殑澶嶆潅搴︿負O(n*n)銆?
鍐嶇湅浜ゆ崲銆備粠紼嬪簭鍚庨潰鎵璺熺殑琛ㄥ彲浠ョ湅鍒幫紝涓ょ鎯呭喌鐨勫驚鐜浉鍚岋紝浜ゆ崲涓嶅悓銆傚叾瀹炰氦鎹㈡湰韜悓鏁版嵁婧愮殑鏈夊簭紼嬪害鏈夋瀬澶х殑鍏崇郴錛屽綋鏁版嵁澶勪簬鍊掑簭鐨勬儏鍐墊椂錛?浜ゆ崲嬈℃暟鍚屽驚鐜竴鏍鳳紙姣忔寰幆鍒ゆ柇閮戒細浜ゆ崲錛夛紝澶嶆潅搴︿負O(n*n)銆傚綋鏁版嵁涓烘搴忥紝灝嗕笉浼氭湁浜ゆ崲銆傚鏉傚害涓篛(0)銆備貢搴忔椂澶勪簬涓棿鐘舵併傛鏄敱浜庤繖鏍?鐨勫師鍥狅紝鎴戜滑閫氬父閮芥槸閫氳繃寰幆嬈℃暟鏉ュ姣旂畻娉曘?


2.浜ゆ崲娉曪細
浜ゆ崲娉曠殑紼嬪簭鏈娓呮櫚綆鍗曪紝姣忔鐢ㄥ綋鍓嶇殑鍏冪礌涓涓鐨勫悓鍏跺悗鐨勫厓绱犳瘮杈冨茍浜ゆ崲銆?
#include <iostream.h>
void ExchangeSort(int* pData,int Count)
{
  int iTemp;
  for(int i=0;i<Count-1;i++)
  {
    for(int j=i+1;j<Count;j++)
    {
      if(pData[j]<pData[i])
      {
        iTemp = pData[i];
        pData[i] = pData[j];
        pData[j] = iTemp;
      }
    }
  }
}

void main()
{
  int data[] = {10,9,8,7,6,5,4};
  ExchangeSort(data,7);
  for (int i=0;i<7;i++)
    cout<<data[i]<<" ";
  cout<<"\n";
}
鍊掑簭(鏈緋熸儏鍐?
絎竴杞細10,9,8,7->9,10,8,7->8,10,9,7->7,10,9,8(浜ゆ崲3嬈?
絎簩杞細7,10,9,8->7,9,10,8->7,8,10,9(浜ゆ崲2嬈?
絎竴杞細7,8,10,9->7,8,9,10(浜ゆ崲1嬈?
寰幆嬈℃暟錛?嬈?
浜ゆ崲嬈℃暟錛?嬈?

鍏朵粬錛?
絎竴杞細8,10,7,9->8,10,7,9->7,10,8,9->7,10,8,9(浜ゆ崲1嬈?
絎簩杞細7,10,8,9->7,8,10,9->7,8,10,9(浜ゆ崲1嬈?
絎竴杞細7,8,10,9->7,8,9,10(浜ゆ崲1嬈?
寰幆嬈℃暟錛?嬈?
浜ゆ崲嬈℃暟錛?嬈?

浠庤繍琛岀殑琛ㄦ牸鏉ョ湅錛屼氦鎹㈠嚑涔庡拰鍐掓場涓鏍風碂銆備簨瀹炵‘瀹炲姝ゃ傚驚鐜鏁板拰鍐掓場涓鏍蜂篃鏄?/2*(n-1)*n錛屾墍浠ョ畻娉曠殑澶嶆潅搴︿粛鐒舵槸O(n*n)銆傜敱浜庢垜浠棤娉曠粰鍑烘墍鏈夌殑鎯呭喌錛屾墍浠ュ彧鑳界洿鎺ュ憡璇夊ぇ瀹朵粬浠湪浜ゆ崲涓婇潰涔熸槸涓鏍風殑緋熺硶錛堝湪鏌愪簺鎯呭喌涓嬬◢濂斤紝鍦ㄦ煇浜涙儏鍐典笅紼嶅樊錛夈?

3.閫夋嫨娉曪細
鐜板湪鎴戜滑緇堜簬鍙互鐪嬪埌涓鐐瑰笇鏈涳細閫夋嫨娉曪紝榪欑鏂規硶鎻愰珮浜嗕竴鐐規ц兘錛堟煇浜涙儏鍐典笅錛?
榪欑鏂規硶綾諱技鎴戜滑浜轟負鐨勬帓搴忎範鎯細浠庢暟鎹腑閫夋嫨鏈灝忕殑鍚岀涓涓間氦鎹紝鍦ㄤ粠鐪佷笅鐨勯儴鍒嗕腑閫夋嫨鏈灝忕殑涓庣浜屼釜浜ゆ崲錛岃繖鏍峰線澶嶄笅鍘匯?
#include <iostream.h>
void SelectSort(int* pData,int Count)
{
  int iTemp;
  int iPos;
  for(int i=0;i<Count-1;i++)
  {
    iTemp = pData[i];
    iPos = i;
    for(int j=i+1;j<Count;j++)
    {
      if(pData[j]<iTemp)
      {
        iTemp = pData[j];
        iPos = j;
      }
    }
    pData[iPos] = pData[i];
    pData[i] = iTemp;
  }
}

void main()
{
  int data[] = {10,9,8,7,6,5,4};
  SelectSort(data,7);
  for (int i=0;i<7;i++)
    cout<<data[i]<<" ";
  cout<<"\n";
}
鍊掑簭(鏈緋熸儏鍐?
絎竴杞細10,9,8,7->(iTemp=9)10,9,8,7->(iTemp=8)10,9,8,7->(iTemp=7)7,9,8,10(浜ゆ崲1嬈?
絎簩杞細7,9,8,10->7,9,8,10(iTemp=8)->(iTemp=8)7,8,9,10(浜ゆ崲1嬈?
絎竴杞細7,8,9,10->(iTemp=9)7,8,9,10(浜ゆ崲0嬈?
寰幆嬈℃暟錛?嬈?
浜ゆ崲嬈℃暟錛?嬈?

鍏朵粬錛?
絎竴杞細8,10,7,9->(iTemp=8)8,10,7,9->(iTemp=7)8,10,7,9->(iTemp=7)7,10,8,9(浜ゆ崲1嬈?
絎簩杞細7,10,8,9->(iTemp=8)7,10,8,9->(iTemp=8)7,8,10,9(浜ゆ崲1嬈?
絎竴杞細7,8,10,9->(iTemp=9)7,8,9,10(浜ゆ崲1嬈?
寰幆嬈℃暟錛?嬈?
浜ゆ崲嬈℃暟錛?嬈?
閬楁喚鐨勬槸綆楁硶闇瑕佺殑寰幆嬈℃暟渚濈劧鏄?/2*(n-1)*n銆傛墍浠ョ畻娉曞鏉傚害涓篛(n*n)銆?
鎴戜滑鏉ョ湅浠栫殑浜ゆ崲銆傜敱浜庢瘡嬈″灞傚驚鐜彧浜х敓涓嬈′氦鎹紙鍙湁涓涓渶灝忓鹼級銆傛墍浠(n)<=n
鎵浠ユ垜浠湁f(n)=O(n)銆?br />鎵浠ワ紝鍦ㄦ暟鎹緝涔辯殑鏃跺欙紝鍙互鍑忓皯涓瀹氱殑浜ゆ崲嬈℃暟銆?


4.鎻掑叆娉曪細
鎻掑叆娉曡緝涓哄鏉傦紝瀹冪殑鍩烘湰宸ヤ綔鍘熺悊鏄娊鍑虹墝錛屽湪鍓嶉潰鐨勭墝涓鎵劇浉搴旂殑浣嶇疆鎻掑叆錛岀劧鍚庣戶緇笅涓寮?
#include <iostream.h>
void InsertSort(int* pData,int Count)
{
  int iTemp;
  int iPos;
  for(int i=1;i<Count;i++)
  {
    iTemp = pData[i];
    iPos = i-1;
    while((iPos>=0) && (iTemp<pData[iPos]))
    {
      pData[iPos+1] = pData[iPos];
      iPos--;
    }
    pData[iPos+1] = iTemp;
  }
}

void main()
{
  int data[] = {10,9,8,7,6,5,4};
  InsertSort(data,7);
  for (int i=0;i<7;i++)
    cout<<data[i]<<" ";
  cout<<"\n";
}

鍊掑簭(鏈緋熸儏鍐?
絎竴杞細10,9,8,7->9,10,8,7(浜ゆ崲1嬈?(寰幆1嬈?
絎簩杞細9,10,8,7->8,9,10,7(浜ゆ崲1嬈?(寰幆2嬈?
絎竴杞細8,9,10,7->7,8,9,10(浜ゆ崲1嬈?(寰幆3嬈?
寰幆嬈℃暟錛?嬈?
浜ゆ崲嬈℃暟錛?嬈?

鍏朵粬錛?
絎竴杞細8,10,7,9->8,10,7,9(浜ゆ崲0嬈?(寰幆1嬈?
絎簩杞細8,10,7,9->7,8,10,9(浜ゆ崲1嬈?(寰幆2嬈?
絎竴杞細7,8,10,9->7,8,9,10(浜ゆ崲1嬈?(寰幆1嬈?
寰幆嬈℃暟錛?嬈?
浜ゆ崲嬈℃暟錛?嬈?

涓婇潰緇撳熬鐨勮涓哄垎鏋愪簨瀹炰笂閫犳垚浜嗕竴縐嶅亣璞★紝璁╂垜浠涓鴻繖縐嶇畻娉曟槸綆鍗曠畻娉曚腑鏈濂界殑錛屽叾瀹炰笉鏄紝鍥犱負鍏跺驚鐜鏁拌櫧鐒跺茍涓嶅浐瀹氾紝鎴戜滑浠嶅彲浠ヤ嬌鐢∣鏂?娉曘備粠涓婇潰鐨勭粨鏋滃彲浠ョ湅鍑猴紝寰幆鐨勬鏁癴(n)<= 1/2*n*(n-1)<=1/2*n*n銆傛墍浠ュ叾澶嶆潅搴︿粛涓篛(n*n)錛堣繖閲岃鏄庝竴涓嬶紝鍏跺疄濡傛灉涓嶆槸涓轟簡灞曠ず榪欎簺綆鍗曟帓搴忕殑涓嶅悓錛屼氦鎹㈡鏁頒粛鐒?鍙互榪欐牱鎺ㄥ錛夈傜幇鍦ㄧ湅浜ゆ崲錛屼粠澶栬涓婄湅錛屼氦鎹㈡鏁版槸O(n)錛堟帹瀵肩被浼奸夋嫨娉曪級錛屼絾鎴戜滑姣忔瑕佽繘琛屼笌鍐呭眰寰幆鐩稿悓嬈℃暟鐨?#8216;=’鎿嶄綔銆傛甯哥殑涓嬈′氦鎹㈡垜浠?闇瑕佷笁嬈?#8216;=’錛岃岃繖閲屾樉鐒跺浜嗕竴浜涳紝鎵浠ユ垜浠氮璐逛簡鏃墮棿銆?

鏈緇堬紝鎴戜釜浜鴻涓猴紝鍦ㄧ畝鍗曟帓搴忕畻娉曚腑錛岄夋嫨娉曟槸鏈濂界殑銆?


浜屻侀珮綰ф帓搴忕畻娉曪細
楂樼駭鎺掑簭綆楁硶涓垜浠皢鍙粙緇嶈繖涓縐嶏紝鍚屾椂涔熸槸鐩墠鎴戞墍鐭ラ亾錛堟垜鐪嬭繃鐨勮祫鏂欎腑錛夌殑鏈蹇殑銆?
瀹冪殑宸ヤ綔鐪嬭搗鏉ヤ粛鐒惰薄涓涓簩鍙夋爲銆傞鍏堟垜浠夋嫨涓涓腑闂村糾iddle紼嬪簭涓垜浠嬌鐢ㄦ暟緇勪腑闂村鹼紝鐒跺悗鎶婃瘮瀹冨皬鐨勬斁鍦ㄥ乏杈癸紝澶х殑鏀懼湪鍙寵竟錛堝叿浣撶殑瀹炵幇鏄粠涓よ竟鎵撅紝鎵懼埌涓瀵瑰悗浜ゆ崲錛夈傜劧鍚庡涓よ竟鍒嗗埆浣跨敤榪欎釜榪囩▼錛堟渶瀹規槗鐨勬柟娉?#8212;—閫掑綊錛夈?

1.蹇熸帓搴忥細
#include <iostream.h>

void run(int* pData,int left,int right)
{
  int i,j;
  int middle,iTemp;
  i = left;
  j = right;
  middle = pData[(left+right)/2]; //姹備腑闂村?
  do{
    while((pData[i]<middle) && (i<right))//浠庡乏鎵弿澶т簬涓肩殑鏁?
      i++;     
    while((pData[j]>middle) && (j>left))//浠庡彸鎵弿澶т簬涓肩殑鏁?
      j--;
    if(i<=j)//鎵懼埌浜嗕竴瀵瑰?
    {
      //浜ゆ崲
      iTemp = pData[i];
      pData[i] = pData[j];
      pData[j] = iTemp;
      i++;
      j--;
    }
  }while(i<=j);//濡傛灉涓よ竟鎵弿鐨勪笅鏍囦氦閿欙紝灝卞仠姝紙瀹屾垚涓嬈★級

  //褰撳乏杈歸儴鍒嗘湁鍊?left<j)錛岄掑綊宸﹀崐杈?
  if(left<j)
    run(pData,left,j);
  //褰撳彸杈歸儴鍒嗘湁鍊?right>i)錛岄掑綊鍙沖崐杈?
  if(right>i)
    run(pData,i,right);
}

void QuickSort(int* pData,int Count)
{
  run(pData,0,Count-1);
}

void main()
{
  int data[] = {10,9,8,7,6,5,4};
  QuickSort(data,7);
  for (int i=0;i<7;i++)
    cout<<data[i]<<" ";
  cout<<"\n";
}

榪欓噷鎴戞病鏈夌粰鍑鴻涓虹殑鍒嗘瀽錛屽洜涓鴻繖涓緢綆鍗曪紝鎴戜滑鐩存帴鏉ュ垎鏋愮畻娉曪細棣栧厛鎴戜滑鑰冭檻鏈鐞嗘兂鐨勬儏鍐?
1.鏁扮粍鐨勫ぇ灝忔槸2鐨勫箓錛岃繖鏍峰垎涓嬪幓濮嬬粓鍙互琚?鏁撮櫎銆傚亣璁句負2鐨刱嬈℃柟錛屽嵆k=log2(n)銆?
2.姣忔鎴戜滑閫夋嫨鐨勫煎垰濂芥槸涓棿鍊鹼紝榪欐牱錛屾暟緇勬墠鍙互琚瓑鍒嗐?
絎竴灞傞掑綊錛屽驚鐜痭嬈★紝絎簩灞傚驚鐜?*(n/2)......
鎵浠ュ叡鏈塶+2(n/2)+4(n/4)+...+n*(n/n) = n+n+n+...+n=k*n=log2(n)*n
鎵浠ョ畻娉曞鏉傚害涓篛(log2(n)*n)
鍏朵粬鐨勬儏鍐靛彧浼氭瘮榪欑鎯呭喌宸紝鏈宸殑鎯呭喌鏄瘡嬈¢夋嫨鍒扮殑middle閮芥槸鏈灝忓兼垨鏈澶у鹼紝閭d箞浠栧皢鍙樻垚浜ゆ崲娉曪紙鐢變簬浣跨敤浜嗛掑綊錛屾儏鍐墊洿緋燂級銆備絾鏄綘璁や負榪欑鎯呭喌鍙戠敓鐨勫嚑鐜囨湁澶氬ぇ錛燂紵鍛靛懙錛屼綘瀹屽叏涓嶅繀鎷呭績榪欎釜闂銆傚疄璺佃瘉鏄庯紝澶у鏁扮殑鎯呭喌錛屽揩閫熸帓搴忔繪槸鏈濂界殑銆?
濡傛灉浣犳媴蹇冭繖涓棶棰橈紝浣犲彲浠ヤ嬌鐢ㄥ爢鎺掑簭錛岃繖鏄竴縐嶇ǔ瀹氱殑O(log2(n)*n)綆楁硶錛屼絾鏄氬父鎯呭喌涓嬮熷害瑕佹參
浜庡揩閫熸帓搴忥紙鍥犱負瑕侀噸緇勫爢錛夈?

涓夈佸叾浠栨帓搴?
1.鍙屽悜鍐掓場錛?
閫氬父鐨勫啋娉℃槸鍗曞悜鐨勶紝鑰岃繖閲屾槸鍙屽悜鐨勶紝涔熷氨鏄榪樿榪涜鍙嶅悜鐨勫伐浣溿?
浠g爜鐪嬭搗鏉ュ鏉傦紝浠旂粏鐞嗕竴涓嬪氨鏄庣櫧浜嗭紝鏄竴涓潵鍥為渿鑽$殑鏂瑰紡銆?
鍐欒繖孌典唬鐮佺殑浣滆呰涓鴻繖鏍峰彲浠ュ湪鍐掓場鐨勫熀紜涓婂噺灝戜竴浜涗氦鎹紙鎴戜笉榪欎箞璁や負錛屼篃璁告垜閿欎簡錛夈?
鍙嶆鎴戣涓鴻繖鏄竴孌墊湁瓚g殑浠g爜錛屽煎緱涓鐪嬨?
#include <iostream.h>
void Bubble2Sort(int* pData,int Count)
{
  int iTemp;
  int left = 1;
  int right =Count -1;
  int t;
  do
  {
    //姝e悜鐨勯儴鍒?
    for(int i=right;i>=left;i--)
    {
      if(pData[i]<pData[i-1])
      {
        iTemp = pData[i];
        pData[i] = pData[i-1];
        pData[i-1] = iTemp;
        t = i;
      }
    }
    left = t+1;

    //鍙嶅悜鐨勯儴鍒?
    for(i=left;i<right+1;i++)
    {
      if(pData[i]<pData[i-1])
      {
        iTemp = pData[i];
        pData[i] = pData[i-1];
        pData[i-1] = iTemp;
        t = i;
      }
    }
    right = t-1;
  }while(left<=right);
}

void main()
{
  int data[] = {10,9,8,7,6,5,4};
  Bubble2Sort(data,7);
  for (int i=0;i<7;i++)
    cout<<data[i]<<" ";
  cout<<"\n";
}


2.SHELL鎺掑簭
榪欎釜鎺掑簭闈炲父澶嶆潅錛岀湅浜嗙▼搴忓氨鐭ラ亾浜嗐?
棣栧厛闇瑕佷竴涓掑噺鐨勬闀匡紝榪欓噷鎴戜滑浣跨敤鐨勬槸9銆?銆?銆?錛堟渶鍚庣殑姝ラ暱蹇呴』鏄?錛夈?
宸ヤ綔鍘熺悊鏄鍏堝鐩擱殧9-1涓厓绱犵殑鎵鏈夊唴瀹規帓搴忥紝鐒跺悗鍐嶄嬌鐢ㄥ悓鏍風殑鏂規硶瀵圭浉闅?-1涓厓绱犵殑鎺掑簭浠ユ綾繪帹銆?
#include <iostream.h>
void ShellSort(int* pData,int Count)
{
  int step[4];
  step[0] = 9;
  step[1] = 5;
  step[2] = 3;
  step[3] = 1;

  int iTemp;
  int k,s,w;
  for(int i=0;i<4;i++)
  {
    k = step[i];
    s = -k;
    for(int j=k;j<Count;j++)
    {
      iTemp = pData[j];
      w = j-k;//姹備笂step涓厓绱犵殑涓嬫爣
      if(s ==0)
      {
        s = -k;
        s++;
        pData[s] = iTemp;
      }
      while((iTemp<pData[w]) && (w>=0) && (w<=Count))
      {
        pData[w+k] = pData[w];
        w = w-k;
      }
      pData[w+k] = iTemp;
    }
  }
}

void main()
{
  int data[] = {10,9,8,7,6,5,4,3,2,1,-10,-1};
  ShellSort(data,12);
  for (int i=0;i<12;i++)
    cout<<data[i]<<" ";
  cout<<"\n";
}
鍛靛懙錛岀▼搴忕湅璧鋒潵鏈変簺澶寸柤銆備笉榪囦篃涓嶆槸寰堥毦錛屾妸s==0鐨勫潡鍘繪帀灝辮交鏉懼浜嗭紝榪欓噷鏄伩鍏嶄嬌鐢?姝ラ暱閫犳垚紼嬪簭寮傚父鑰屽啓鐨勪唬鐮併傝繖涓唬鐮佹垜璁や負寰堝煎緱涓鐪嬨?
榪欎釜綆楁硶鐨勫緱鍚嶆槸鍥犱負鍏跺彂鏄庤呯殑鍚嶅瓧D.L.SHELL銆備緷鐓у弬鑰冭祫鏂欎笂鐨勮娉曪細“鐢變簬澶嶆潅鐨勬暟瀛﹀師鍥犻伩鍏嶄嬌鐢?鐨勫箓嬈℃闀匡紝瀹冭兘闄嶄綆綆楁硶鏁堢巼銆?#8221;鍙﹀綆楁硶鐨勫鏉傚害涓簄鐨?.2嬈″箓銆傚悓鏍峰洜涓洪潪甯稿鏉傚茍“瓚呭嚭鏈功璁ㄨ鑼冨洿”鐨勫師鍥狅紙鎴戜篃涓嶇煡閬撹繃紼嬶級錛屾垜浠彧鏈夌粨鏋滀簡銆?

鏈鍚庯紝甯屾湜澶у鎰夊揩鐨勭紪紼嬨傛湁浠涔堟剰瑙侊紝緇欐垜鎻愬惂錛?

eircQ 2011-06-17 08:09 鍙戣〃璇勮
]]>
Hash 綆楁硶鍙婂叾搴旂敤(杞?http://m.shnenglu.com/softko/archive/2010/12/02/135309.htmleircQeircQThu, 02 Dec 2010 15:08:00 GMThttp://m.shnenglu.com/softko/archive/2010/12/02/135309.htmlhttp://m.shnenglu.com/softko/comments/135309.htmlhttp://m.shnenglu.com/softko/archive/2010/12/02/135309.html#Feedback0http://m.shnenglu.com/softko/comments/commentRss/135309.htmlhttp://m.shnenglu.com/softko/services/trackbacks/135309.html鏈燂細2004-07-30]鏉ユ簮錛?a target="_blank" style="color: rgb(65, 81, 154); text-decoration: none; ">CSDN  浣滆咃細[瀛椾綋錛?a style="color: rgb(65, 81, 154); text-decoration: none; ">澶?/a> 涓?/a> 灝?/a>]

--------------- 
浠涔堟槸 Hash 
Hash 鐨勯噸瑕佺壒鎬?nbsp;
Hash 鍑芥暟鐨勫疄鐜?nbsp;
涓昏鐨?Hash 綆楁硶 
Hash 綆楁硶鐨勫畨鍏ㄩ棶棰?nbsp;
Hash 綆楁硶鐨勫簲鐢?nbsp;
緇?璁?nbsp;
---------------


Hash錛屼竴鑸炕璇戝仛“鏁e垪”錛屼篃鏈夌洿鎺ラ煶璇戜負"鍝堝笇"鐨勶紝灝辨槸鎶婁換鎰忛暱搴︾殑杈撳叆錛堝張鍙仛棰勬槧灝勶紝 pre-image錛夛紝閫氳繃鏁e垪綆楁硶錛屽彉鎹㈡垚鍥哄畾闀垮害鐨勮緭鍑猴紝璇ヨ緭鍑哄氨鏄暎鍒楀箋傝繖縐嶈漿鎹㈡槸涓縐嶅帇緙╂槧灝勶紝涔熷氨鏄紝鏁e垪鍊肩殑絀洪棿閫氬父榪滃皬浜庤緭鍏ョ殑絀洪棿錛屼笉鍚岀殑杈撳叆鍙兘浼氭暎鍒楁垚鐩稿悓鐨勮緭鍑猴紝鑰屼笉鍙兘浠庢暎鍒楀兼潵鍞竴鐨勭‘瀹氳緭鍏ュ箋?/p>

鏁板琛ㄨ堪涓猴細h = H(M) 錛屽叾涓璈( )--鍗曞悜鏁e垪鍑芥暟錛孧--浠繪剰闀垮害鏄庢枃錛宧--鍥哄畾闀垮害鏁e垪鍊箋?/p>

 

鍦ㄤ俊鎭畨鍏ㄩ鍩熶腑搴旂敤鐨凥ash綆楁硶錛岃繕闇瑕佹弧瓚沖叾浠栧叧閿壒鎬э細

絎竴褰撶劧鏄崟鍚戞?one-way)錛屼粠棰勬槧灝勶紝鑳藉綆鍗曡繀閫熺殑寰楀埌鏁e垪鍊鹼紝鑰屽湪璁$畻涓婁笉鍙兘鏋勯犱竴涓鏄犲皠錛屼嬌鍏舵暎鍒楃粨鏋滅瓑浜庢煇涓壒瀹氱殑鏁e垪鍊鹼紝鍗蟲瀯閫犵浉搴旂殑M=H-1(h)涓嶅彲琛屻傝繖鏍鳳紝鏁e垪鍊煎氨鑳藉湪緇熻涓婂敮涓鐨勮〃寰佽緭鍏ュ鹼紝鍥犳錛屽瘑鐮佸涓婄殑 Hash 鍙堣縐頒負"娑堟伅鎽樿(message digest)"錛屽氨鏄姹傝兘鏂逛究鐨勫皢"娑堟伅"榪涜"鎽樿"錛屼絾鍦?鎽樿"涓棤娉曞緱鍒版瘮"鎽樿"鏈韓鏇村鐨勫叧浜?娑堟伅"鐨勪俊鎭?/p>

絎簩鏄姉鍐茬獊鎬?collision-resistant)錛屽嵆鍦ㄧ粺璁′笂鏃犳硶浜х敓2涓暎鍒楀肩浉鍚岀殑棰勬槧灝勩傜粰瀹歁錛岃綆椾笂鏃犳硶鎵懼埌M'錛屾弧瓚矵(M)=H(M') 錛屾璋撳急鎶楀啿紿佹э紱璁$畻涓婁篃闅句互瀵繪壘涓瀵逛換鎰忕殑M鍜孧'錛屼嬌婊¤凍H(M)=H(M') 錛屾璋撳己鎶楀啿紿佹с傝姹?寮烘姉鍐茬獊鎬?涓昏鏄負浜嗛槻鑼冩墍璋?鐢熸棩鏀誨嚮(birthday attack)"錛屽湪涓涓?0浜虹殑鍥綋涓紝浣犺兘鎵懼埌鍜屼綘鐢熸棩鐩稿悓鐨勪漢鐨勬鐜囨槸2.4%錛岃屽湪鍚屼竴鍥綋涓紝鏈?浜虹敓鏃ョ浉鍚岀殑姒傜巼鏄?1.7%銆傜被浼肩殑錛屽綋棰勬槧灝勭殑絀洪棿寰堝ぇ鐨勬儏鍐典笅錛岀畻娉曞繀欏繪湁瓚沖鐨勫己搴︽潵淇濊瘉涓嶈兘杞繪槗鎵懼埌"鐩稿悓鐢熸棩"鐨勪漢銆?/p>

絎笁鏄槧灝勫垎甯冨潎鍖鎬у拰宸垎鍒嗗竷鍧囧寑鎬э紝鏁e垪緇撴灉涓紝涓?0 鐨?bit 鍜屼負 1 鐨?bit 錛屽叾鎬繪暟搴旇澶ц嚧鐩哥瓑錛涜緭鍏ヤ腑涓涓?bit 鐨勫彉鍖栵紝鏁e垪緇撴灉涓皢鏈変竴鍗婁互涓婄殑 bit 鏀瑰彉錛岃繖鍙堝彨鍋?闆穿鏁堝簲(avalanche effect)"錛涜瀹炵幇浣挎暎鍒楃粨鏋滀腑鍑虹幇 1bit 鐨勫彉鍖栵紝鍒欒緭鍏ヤ腑鑷沖皯鏈変竴鍗婁互涓婄殑 bit 蹇呴』鍙戠敓鍙樺寲銆傚叾瀹炶川鏄繀欏諱嬌杈撳叆涓瘡涓涓?bit 鐨勪俊鎭紝灝介噺鍧囧寑鐨勫弽鏄犲埌杈撳嚭鐨勬瘡涓涓?bit 涓婂幓錛涜緭鍑轟腑鐨勬瘡涓涓?bit錛岄兘鏄緭鍏ヤ腑灝藉彲鑳藉 bit 鐨勪俊鎭竴璧蜂綔鐢ㄧ殑緇撴灉銆?/p>

 

Damgard 鍜?Merkle 瀹氫箟浜嗘墍璋?#8220;鍘嬬緝鍑芥暟(compression function)”錛屽氨鏄皢涓涓浐瀹氶暱搴﹁緭鍏ワ紝鍙樻崲鎴愯緝鐭殑鍥哄畾闀垮害鐨勮緭鍑猴紝榪欏瀵嗙爜瀛﹀疄璺典笂 Hash 鍑芥暟鐨勮璁′駭鐢熶簡寰堝ぇ鐨勫獎鍝嶃侶ash鍑芥暟灝辨槸琚璁′負鍩轟簬閫氳繃鐗瑰畾鍘嬬緝鍑芥暟鐨勪笉鏂噸澶?#8220;鍘嬬緝”杈撳叆鐨勫垎緇勫拰鍓嶄竴嬈″帇緙╁鐞嗙殑緇撴灉鐨勮繃紼嬶紝鐩村埌鏁翠釜娑堟伅閮借鍘嬬緝瀹屾瘯錛屾渶鍚庣殑杈撳嚭浣滀負鏁翠釜娑堟伅鐨勬暎鍒楀箋傚敖綆¤繕緙轟箯涓ユ牸鐨勮瘉鏄庯紝浣嗙粷澶у鏁頒笟鐣岀殑鐮旂┒鑰呴兘鍚屾剰錛屽鏋滃帇緙╁嚱鏁版槸瀹夊叏鐨勶紝閭d箞浠ヤ笂榪板艦寮忔暎鍒椾換鎰忛暱搴︾殑娑堟伅涔熷皢鏄畨鍏ㄧ殑銆傝繖灝辨槸鎵璋?Damgard/Merkle 緇撴瀯錛?/p>

鍦ㄤ笅鍥句腑錛屼換鎰忛暱搴︾殑娑堟伅琚垎鎷嗘垚絎﹀悎鍘嬬緝鍑芥暟杈撳叆瑕佹眰鐨勫垎緇勶紝鏈鍚庝竴涓垎緇勫彲鑳介渶瑕佸湪鏈熬娣諱笂鐗瑰畾鐨勫~鍏呭瓧鑺傦紝榪欎簺鍒嗙粍灝嗚欏哄簭澶勭悊錛岄櫎浜嗙涓涓秷鎭垎緇勫皢涓庢暎鍒楀垵濮嬪寲鍊間竴璧蜂綔涓哄帇緙╁嚱鏁扮殑杈撳叆澶栵紝褰撳墠鍒嗙粍灝嗗拰鍓嶄竴涓垎緇勭殑鍘嬬緝鍑芥暟杈撳嚭涓璧瘋浣滀負榪欎竴嬈″帇緙╃殑杈撳叆錛岃屽叾杈撳嚭鍙堝皢琚綔涓轟笅涓涓垎緇勫帇緙╁嚱鏁拌緭鍏ョ殑涓閮ㄥ垎錛岀洿鍒版渶鍚庝竴涓帇緙╁嚱鏁扮殑杈撳嚭錛屽皢琚綔涓烘暣涓秷鎭暎鍒楃殑緇撴灉銆?/p>

 

 

MD5 鍜?SHA1 鍙互璇存槸鐩墠搴旂敤鏈騫挎硾鐨凥ash綆楁硶錛岃屽畠浠兘鏄互 MD4 涓哄熀紜璁捐鐨勩?/p>

1) MD4 
MD4(RFC 1320)鏄?MIT 鐨?Ronald L. Rivest 鍦?1990 騫磋璁$殑錛孧D 鏄?Message Digest 鐨勭緝鍐欍傚畠閫傜敤鍦?2浣嶅瓧闀跨殑澶勭悊鍣ㄤ笂鐢ㄩ珮閫熻蔣浠跺疄鐜?-瀹冩槸鍩轟簬 32 浣嶆搷浣滄暟鐨勪綅鎿嶄綔鏉ュ疄鐜扮殑銆傚畠鐨勫畨鍏ㄦт笉鍍廟SA閭f牱鍩轟簬鏁板鍋囪錛屽敖綆?Den Boer銆丅osselaers 鍜?Dobbertin 寰堝揩灝辯敤鍒嗘瀽鍜屽樊鍒嗘垚鍔熺殑鏀誨嚮浜嗗畠3杞彉鎹腑鐨?2 杞紝璇佹槑浜嗗畠騫朵笉鍍忔湡鏈涚殑閭f牱瀹夊叏錛屼絾瀹冪殑鏁翠釜綆楁硶騫舵病鏈夌湡姝h鐮磋В榪囷紝Rivest 涔熷緢蹇繘琛屼簡鏀硅繘銆?/p>

涓嬮潰鏄竴浜汳D4鏁e垪緇撴灉鐨勪緥瀛愶細

MD4 ("") = 31d6cfe0d16ae931b73c59d7e0c089c0 
MD4 ("a") = bde52cb31de33e46245e05fbdbd6fb24 
MD4 ("abc") = a448017aaf21d8525fc10ae87aa6729d 
MD4 ("message digest") = d9130a8164549fe818874806e1c7014b 
MD4 ("abcdefghijklmnopqrstuvwxyz") = d79e1c308aa5bbcdeea8ed63df412da9 
MD4 ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789") = 043f8582f241db351ce627e153e7f0e4 
MD4 ("12345678901234567890123456789012345678901234567890123456789012345678901234567890") = e33b4ddc9c38f2199c3e7b164fcc0536


2) MD5 
MD5(RFC 1321)鏄?Rivest 浜?991騫村MD4鐨勬敼榪涚増鏈傚畠瀵硅緭鍏ヤ粛浠?12浣嶅垎緇勶紝鍏惰緭鍑烘槸4涓?2浣嶅瓧鐨勭駭鑱旓紝涓?MD4 鐩稿悓銆傚畠杈僊D4鎵鍋氱殑鏀硅繘鏄細

1) 鍔犲叆浜嗙鍥涜疆 
2) 姣忎竴姝ラ兘鏈夊敮涓鐨勫姞娉曞父鏁幫紱 
3) 絎簩杞腑鐨凣鍑芥暟浠?(X 鈭?Y) 鈭?(X 鈭?Z) 鈭?(Y 鈭?Z)) 鍙樹負 ((X 鈭?Z) 鈭?(Y 鈭?锝瀂))浠ュ噺灝忓叾瀵圭О鎬э紱 
4) 姣忎竴姝ラ兘鍔犲叆浜嗗墠涓姝ョ殑緇撴灉錛屼互鍔犲揩"闆穿鏁堝簲"錛?nbsp;
5) 鏀瑰彉浜嗙2杞拰絎?杞腑璁塊棶杈撳叆瀛愬垎緇勭殑欏哄簭錛屽噺灝忎簡褰㈠紡鐨勭浉浼肩▼搴︼紱 
6) 榪戜技浼樺寲浜嗘瘡杞殑寰幆宸︾Щ浣嶇Щ閲忥紝浠ユ湡鍔犲揩"闆穿鏁堝簲"錛屽悇杞殑寰幆宸︾Щ閮戒笉鍚屻?nbsp;
灝界MD5姣擬D4鏉ュ緱澶嶆潅錛屽茍涓旈熷害杈冧箣瑕佹參涓鐐癸紝浣嗘洿瀹夊叏錛屽湪鎶楀垎鏋愬拰鎶楀樊鍒嗘柟闈㈣〃鐜版洿濂姐?/p>

娑堟伅棣栧厛琚媶鎴愯嫢騫蹭釜512浣嶇殑鍒嗙粍錛屽叾涓渶鍚?12浣嶄竴涓垎緇勬槸“娑堟伅灝?濉厖瀛楄妭(100…0)+64 浣嶆秷鎭暱搴?#8221;錛屼互紜繚瀵逛簬涓嶅悓闀垮害鐨勬秷鎭紝璇ュ垎緇勪笉鐩稿悓銆?4浣嶆秷鎭暱搴︾殑闄愬埗瀵艱嚧浜哅D5瀹夊叏鐨勮緭鍏ラ暱搴﹀繀欏誨皬浜?64bit錛屽洜涓哄ぇ浜?4浣嶇殑闀垮害淇℃伅灝嗚蹇界暐銆傝?涓?2浣嶅瘎瀛樺櫒瀛楀垵濮嬪寲涓篈=0x01234567錛孊=0x89abcdef錛孋=0xfedcba98錛孌=0x76543210錛屽畠浠皢濮嬬粓鍙備笌榪愮畻騫跺艦鎴愭渶緇堢殑鏁e垪緇撴灉銆?/p>

鎺ョ潃鍚勪釜512浣嶆秷鎭垎緇勪互16涓?2浣嶅瓧鐨勫艦寮忚繘鍏ョ畻娉曠殑涓誨驚鐜紝512浣嶆秷鎭垎緇勭殑涓暟鎹喅瀹氫簡寰幆鐨勬鏁般備富寰幆鏈?杞紝姣忚疆鍒嗗埆鐢ㄥ埌浜嗛潪綰挎у嚱鏁?/p>

F(X, Y, Z) = (X 鈭?Y) 鈭?(锝瀀 鈭?Z) 
G(X, Y, Z) = (X 鈭?Z) 鈭?(Y 鈭?锝瀂) 
H(X, Y, Z) =X ⊕ Y ⊕ Z 
I(X, Y, Z) = X ⊕ (Y 鈭?锝瀂) 
榪?杞彉鎹㈡槸瀵硅繘鍏ヤ富寰幆鐨?12浣嶆秷鎭垎緇勭殑16涓?2浣嶅瓧鍒嗗埆榪涜濡備笅鎿嶄綔錛氬皢A銆丅銆丆銆丏鐨勫壇鏈琣銆乥銆乧銆乨涓殑3涓粡F銆丟銆丠銆両榪愮畻鍚庣殑緇撴灉涓庣4涓浉鍔狅紝鍐嶅姞涓?2浣嶅瓧鍜屼竴涓?2浣嶅瓧鐨勫姞娉曞父鏁幫紝騫跺皢鎵寰椾箣鍊煎驚鐜乏縐昏嫢騫蹭綅錛屾渶鍚庡皢鎵寰楃粨鏋滃姞涓奱銆乥銆乧銆乨涔嬩竴錛屽茍鍥為佽嚦ABCD錛岀敱姝ゅ畬鎴愪竴嬈″驚鐜?/p>

鎵鐢ㄧ殑鍔犳硶甯告暟鐢辮繖鏍蜂竴寮犺〃T[i]鏉ュ畾涔夛紝鍏朵腑i涓?…64錛孴[i]鏄痠鐨勬寮︾粷瀵瑰間箣4294967296嬈℃柟鐨勬暣鏁伴儴鍒嗭紝榪欐牱鍋氭槸涓轟簡閫氳繃姝e雞鍑芥暟鍜屽箓鍑芥暟鏉ヨ繘涓姝ユ秷闄ゅ彉鎹腑鐨勭嚎鎬фс?/p>

褰撴墍鏈?12浣嶅垎緇勯兘榪愮畻瀹屾瘯鍚庯紝ABCD鐨勭駭鑱斿皢琚緭鍑轟負MD5鏁e垪鐨勭粨鏋溿備笅闈㈡槸涓浜汳D5鏁e垪緇撴灉鐨勪緥瀛愶細

MD5 ("") = d41d8cd98f00b204e9800998ecf8427e 
MD5 ("a") = 0cc175b9c0f1b6a831c399e269772661 
MD5 ("abc") = 900150983cd24fb0d6963f7d28e17f72 
MD5 ("message digest") = f96b697d7cb7938d525a2f31aaf161d0 
MD5 ("abcdefghijklmnopqrstuvwxyz") = c3fcd3d76192e4007dfb496cca67e13b 
MD5 ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789") = d174ab98d277d9f5a5611c2c9f419d9f 
MD5 ("12345678901234567890123456789012345678901234567890123456789012345678901234567890") = 57edf4a22be3c955ac49da2e2107b67a 
鍙傝冪浉搴擱FC鏂囨。鍙互寰楀埌MD4銆丮D5綆楁硶鐨勮緇嗘弿榪板拰綆楁硶鐨凜婧愪唬鐮併?/p>

3) SHA1 鍙婂叾浠?nbsp;
SHA1鏄敱NIST NSA璁捐涓哄悓DSA涓璧蜂嬌鐢ㄧ殑錛岃闂甴ttp://www.itl.nist.gov/fipspubs鍙互寰楀埌瀹冪殑璇︾粏瑙勮寖--[/url]"FIPS PUB 180-1 SECURE HASH STANDARD"銆傚畠瀵歸暱搴﹀皬浜?64鐨勮緭鍏ワ紝浜х敓闀垮害涓?60bit鐨勬暎鍒楀鹼紝鍥犳鎶楃┓涓?brute-force)鎬ф洿濂姐係HA-1 璁捐鏃跺熀浜庡拰MD4鐩稿悓鍘熺悊,騫朵笖妯′豢浜嗚綆楁硶銆傚洜涓哄畠灝嗕駭鐢?60bit鐨勬暎鍒楀鹼紝鍥犳瀹冩湁5涓弬涓庤繍綆楃殑32浣嶅瘎瀛樺櫒瀛楋紝娑堟伅鍒嗙粍鍜屽~鍏呮柟寮忎笌MD5鐩稿悓錛屼富寰幆涔熷悓鏍鋒槸4杞紝浣嗘瘡杞繘琛?0嬈℃搷浣滐紝闈炵嚎鎬ц繍綆椼佺Щ浣嶅拰鍔犳硶榪愮畻涔熶笌MD5綾諱技錛屼絾闈炵嚎鎬у嚱鏁般佸姞娉曞父鏁板拰寰幆宸︾Щ鎿嶄綔鐨勮璁℃湁涓浜涘尯鍒紝鍙互鍙傝冧笂闈㈡彁鍒扮殑瑙勮寖鏉ヤ簡瑙h繖浜涚粏鑺傘備笅闈㈡槸涓浜汼HA1鏁e垪緇撴灉鐨勪緥瀛愶細

SHA1 ("abc") = a9993e36 4706816a ba3e2571 7850c26c 9cd0d89d 
SHA1 ("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq") = 84983e44 1c3bd26e baae4aa1 f95129e5 e54670f1 
鍏朵粬涓浜涚煡鍚嶇殑Hash綆楁硶榪樻湁MD2銆丯-Hash銆丷IPE-MD銆丠AVAL絳夌瓑銆備笂闈㈡彁鍒扮殑榪欎簺閮藉睘浜?綰?Hash綆楁硶銆傝繕鏈夊彟2綾籋ash綆楁硶錛屼竴綾誨氨鏄熀浜庡縐板垎緇勭畻娉曠殑鍗曞悜鏁e垪綆楁硶錛屽吀鍨嬬殑渚嬪瓙鏄熀浜嶥ES鐨勬墍璋揇avies-Meyer綆楁硶錛屽彟澶栬繕鏈夌粡IDEA鏀硅繘鐨凞avies-Meyer綆楁硶錛屽畠浠袱鑰呯洰鍓嶉兘琚涓烘槸瀹夊叏鐨勭畻娉曘傚彟涓綾繪槸鍩轟簬妯¤繍綆?紱繪暎瀵規暟鐨勶紝涔熷氨鏄熀浜庡叕寮瀵嗛挜綆楁硶鐨勶紝浣嗗洜涓哄叾榪愮畻寮閿澶ぇ錛岃岀己涔忓緢濂界殑搴旂敤鍓嶆櫙銆?/p>

 

娌℃湁閫氳繃鍒嗘瀽鍜屽樊鍒嗘敾鍑昏冮獙鐨勭畻娉曪紝澶у閮藉凡緇忓き鎶樺湪瀹為獙瀹ら噷浜嗭紝鍥犳錛屽鏋滅洰鍓嶆祦琛岀殑Hash綆楁硶鑳藉畬鍏ㄧ鍚堝瘑鐮佸鎰忎箟涓婄殑鍗曞悜鎬у拰鎶楀啿紿佹э紝灝變繚璇佷簡鍙湁絀蜂婦錛屾墠鏄牬鍧廐ash榪愮畻瀹夊叏鐗規х殑鍞竴鏂規硶銆備負浜嗗鎶楀急鎶楀啿紿佹э紝鎴戜滑鍙兘瑕佺┓涓句釜鏁板拰鏁e垪鍊肩┖闂撮暱搴︿竴鏍峰ぇ鐨勮緭鍏ワ紝鍗沖皾璇?^128鎴?^160涓笉鍚岀殑杈撳叆錛岀洰鍓嶄竴鍙伴珮妗d釜浜虹數鑴戝彲鑳介渶瑕?0^25騫存墠鑳藉畬鎴愯繖涓鑹板法鐨勫伐浣滐紝鍗充嬌鏄渶楂樼鐨勫茍琛岀郴緇燂紝榪欎篃涓嶆槸鍦ㄥ嚑鍗冨勾閲岀殑騫插緱瀹岀殑浜嬨傝屽洜涓?鐢熸棩鏀誨嚮"鏈夋晥鐨勯檷浣庝簡闇瑕佺┓涓劇殑絀洪棿錛屽皢鍏墮檷浣庝負澶х害1.2*2^64鎴?.2*2^80錛屾墍浠ワ紝寮烘姉鍐茬獊鎬ф槸鍐沖畾Hash綆楁硶瀹夊叏鎬х殑鍏抽敭銆?/p>

鍦∟IST鏂扮殑 Advanced Encryption Standard (AES)涓紝浣跨敤浜嗛暱搴︿負128銆?92銆?56bit 鐨勫瘑閽ワ紝鍥犳鐩稿簲鐨勮璁′簡 SHA256銆丼HA384銆丼HA512錛屽畠浠皢鎻愪緵鏇村ソ鐨勫畨鍏ㄦс?/p>

 

Hash綆楁硶鍦ㄤ俊鎭畨鍏ㄦ柟闈㈢殑搴旂敤涓昏浣撶幇鍦ㄤ互涓嬬殑3涓柟闈細

1) 鏂囦歡鏍¢獙 
鎴戜滑姣旇緝鐔熸倝鐨勬牎楠岀畻娉曟湁濂囧伓鏍¢獙鍜孋RC鏍¢獙錛岃繖2縐嶆牎楠屽茍娌℃湁鎶楁暟鎹鏀圭殑鑳藉姏錛屽畠浠竴瀹氱▼搴︿笂鑳芥嫻嬪茍綰犳鏁版嵁浼犺緭涓殑淇¢亾璇爜錛屼絾鍗翠笉鑳介槻姝㈠鏁版嵁鐨勬伓鎰忕牬鍧忋?/p>

MD5 Hash綆楁硶鐨?鏁板瓧鎸囩汗"鐗規э紝浣垮畠鎴愪負鐩墠搴旂敤鏈騫挎硾鐨勪竴縐嶆枃浠跺畬鏁存ф牎楠屽拰(Checksum)綆楁硶錛屼笉灝慤nix緋葷粺鏈夋彁渚涜綆梞d5 checksum鐨勫懡浠ゃ傚畠甯歌鐢ㄥ湪涓嬮潰鐨?縐嶆儏鍐典笅錛?/p>

絎竴鏄枃浠朵紶閫佸悗鐨勬牎楠岋紝灝嗗緱鍒扮殑鐩爣鏂囦歡璁$畻 md5 checksum錛屼笌婧愭枃浠剁殑md5 checksum 姣斿錛岀敱涓よ?md5 checksum 鐨勪竴鑷存э紝鍙互浠庣粺璁′笂淇濊瘉2涓枃浠剁殑姣忎竴涓爜鍏冧篃鏄畬鍏ㄧ浉鍚岀殑銆傝繖鍙互媯楠屾枃浠朵紶杈撹繃紼嬩腑鏄惁鍑虹幇閿欒錛屾洿閲嶈鐨勬槸鍙互淇濊瘉鏂囦歡鍦ㄤ紶杈撹繃紼嬩腑鏈鎭舵剰綃℃敼銆備竴涓緢鍏稿瀷鐨勫簲鐢ㄦ槸ftp鏈嶅姟錛岀敤鎴峰彲浠ョ敤鏉ヤ繚璇佸嬈℃柇鐐圭畫浼狅紝鐗瑰埆鏄粠闀滃儚绔欑偣涓嬭澆鐨勬枃浠剁殑姝g‘鎬с?/p>

鏇村嚭鑹茬殑瑙e喅鏂規硶鏄墍璋撶殑浠g爜絳懼悕錛屾枃浠剁殑鎻愪緵鑰呭湪鎻愪緵鏂囦歡鐨勫悓鏃訛紝鎻愪緵瀵規枃浠禜ash鍊肩敤鑷繁鐨勪唬鐮佺鍚嶅瘑閽ヨ繘琛屾暟瀛楃鍚嶇殑鍊鹼紝鍙婅嚜宸辯殑浠g爜絳懼悕璇佷功銆傛枃浠剁殑鎺ュ彈鑰呬笉浠呰兘楠岃瘉鏂囦歡鐨勫畬鏁存э紝榪樺彲浠ヤ緷鎹嚜宸卞璇佷功絳懼彂鑰呭拰璇佷功鎷ユ湁鑰呯殑淇′換紼嬪害錛屽喅瀹氭槸鍚︽帴鍙楄鏂囦歡銆傛祻瑙堝櫒鍦ㄤ笅杞借繍琛屾彃浠跺拰java灝忕▼搴忔椂錛屼嬌鐢ㄧ殑灝辨槸榪欐牱鐨勬ā寮忋?/p>

絎簩鏄敤浣滀繚瀛樹簩榪涘埗鏂囦歡緋葷粺鐨勬暟瀛楁寚綰癸紝浠ヤ究媯嫻嬫枃浠剁郴緇熸槸鍚︽湭緇忓厑璁哥殑琚慨鏀廣備笉灝戠郴緇熺鐞?緋葷粺瀹夊叏杞歡閮芥彁渚涜繖涓鏂囦歡緋葷粺瀹屾暣鎬ц瘎浼扮殑鍔熻兘錛屽湪緋葷粺鍒濆瀹夎瀹屾瘯鍚庯紝寤虹珛瀵規枃浠剁郴緇熺殑鍩虹鏍¢獙鍜屾暟鎹簱錛屽洜涓烘暎鍒楁牎楠屽拰鐨勯暱搴﹀緢灝忥紝瀹冧滑鍙互鏂逛究鐨勮瀛樻斁鍦ㄥ閲忓緢灝忕殑瀛樺偍浠嬭川涓娿傛鍚庯紝鍙互瀹氭湡鎴栨牴鎹渶瑕侊紝鍐嶆璁$畻鏂囦歡緋葷粺鐨勬牎楠屽拰錛屼竴鏃﹀彂鐜頒笌鍘熸潵淇濆瓨鐨勫兼湁涓嶅尮閰嶏紝璇存槑璇ユ枃浠跺凡緇忚闈炴硶淇敼錛屾垨鑰呮槸琚梾姣掓劅鏌擄紝鎴栬呰鏈ㄩ┈紼嬪簭鏇夸唬銆俆ripWire灝辨彁渚涗簡涓涓綾誨簲鐢ㄧ殑鍏稿瀷渚嬪瓙銆?/p>

鏇村畬緹庣殑鏂規硶鏄嬌鐢?MAC"銆?MAC" 鏄竴涓笌Hash瀵嗗垏鐩稿叧鐨勫悕璇嶏紝鍗充俊鎭壌鏉冪爜(Message Authority Code)銆傚畠鏄笌瀵嗛挜鐩稿叧鐨凥ash鍊鹼紝蹇呴』鎷ユ湁璇ュ瘑閽ユ墠鑳芥楠岃Hash鍊箋傛枃浠剁郴緇熺殑鏁板瓧鎸囩汗涔熻浼氳淇濆瓨鍦ㄤ笉鍙俊浠葷殑浠嬭川涓婏紝鍙鎷ユ湁璇ュ瘑閽ヨ呮彁渚涘彲閴村埆鎬с傚茍涓斿湪鏂囦歡鐨勬暟瀛楁寚綰規湁鍙兘闇瑕佽淇敼鐨勬儏鍐典笅錛屽彧鏈夊瘑閽ョ殑鎷ユ湁鑰呭彲浠ヨ綆楀嚭鏂扮殑鏁e垪鍊鹼紝鑰屼紒鍥劇牬鍧忔枃浠跺畬鏁存ц呭嵈涓嶈兘寰楅炪?/p>

2) 鏁板瓧絳懼悕 
Hash 綆楁硶涔熸槸鐜頒唬瀵嗙爜浣撶郴涓殑涓涓噸瑕佺粍鎴愰儴鍒嗐傜敱浜庨潪瀵圭О綆楁硶鐨勮繍綆楅熷害杈冩參錛屾墍浠ュ湪鏁板瓧絳懼悕鍗忚涓紝鍗曞悜鏁e垪鍑芥暟鎵紨浜嗕竴涓噸瑕佺殑瑙掕壊銆?/p>

鍦ㄨ繖縐嶇鍚嶅崗璁腑錛屽弻鏂瑰繀欏諱簨鍏堝崗鍟嗗ソ鍙屾柟閮芥敮鎸佺殑Hash鍑芥暟鍜岀鍚嶇畻娉曘?/p>

絳懼悕鏂瑰厛瀵硅鏁版嵁鏂囦歡榪涜璁$畻鍏舵暎鍒楀鹼紝鐒跺悗鍐嶅寰堢煭鐨勬暎鍒楀肩粨鏋?-濡侻d5鏄?6涓瓧鑺傦紝SHA1鏄?0瀛楄妭錛岀敤闈炲縐扮畻娉曡繘琛屾暟瀛楃鍚嶆搷浣溿傚鏂瑰湪楠岃瘉絳懼悕鏃訛紝涔熸槸鍏堝璇ユ暟鎹枃浠惰繘琛岃綆楀叾鏁e垪鍊鹼紝鐒跺悗鍐嶇敤闈炲縐扮畻娉曢獙璇佹暟瀛楃鍚嶃?/p>

瀵?Hash 鍊鹼紝鍙堢О"鏁板瓧鎽樿"榪涜鏁板瓧絳懼悕錛屽湪緇熻涓婂彲浠ヨ涓轟笌瀵規枃浠舵湰韜繘琛屾暟瀛楃鍚嶆槸絳夋晥鐨勩傝屼笖榪欐牱鐨勫崗璁繕鏈夊叾浠栫殑浼樼偣錛?/p>

棣栧厛錛屾暟鎹枃浠舵湰韜彲浠ュ悓瀹冪殑鏁e垪鍊煎垎寮淇濆瓨錛岀鍚嶉獙璇佷篃鍙互鑴辯鏁版嵁鏂囦歡鏈韓鐨勫瓨鍦ㄨ岃繘琛屻?/p>

鍐嶈咃紝鏈変簺鎯呭喌涓嬬鍚嶅瘑閽ュ彲鑳戒笌瑙e瘑瀵嗛挜鏄悓涓涓紝涔熷氨鏄錛屽鏋滃涓涓暟鎹枃浠剁鍚嶏紝涓庡鍏惰繘琛岄潪瀵圭О鐨勮В瀵嗘搷浣滄槸鐩稿悓鐨勬搷浣滐紝榪欐槸鐩稿綋鍗遍櫓鐨勶紝鎭舵剰鐨勭牬鍧忚呭彲鑳藉皢涓涓瘯鍥鵑獥浣犲皢鍏惰В瀵嗙殑鏂囦歡錛屽厖褰撲竴涓姹備綘絳懼悕鐨勬枃浠跺彂閫佺粰浣犮傚洜姝わ紝鍦ㄥ浠諱綍鏁版嵁鏂囦歡榪涜鏁板瓧絳懼悕鏃訛紝鍙湁瀵瑰叾Hash鍊艱繘琛岀鍚嶆墠鏄畨鍏ㄧ殑銆?/p>

3) 閴存潈鍗忚 
濡備笅鐨勯壌鏉冨崗璁張琚О浣?鎸戞垬--璁よ瘉妯″紡錛氬湪浼犺緭淇¢亾鏄彲琚睛鍚紝浣嗕笉鍙綃℃敼鐨勬儏鍐典笅錛岃繖鏄竴縐嶇畝鍗曡屽畨鍏ㄧ殑鏂規硶銆?/p>

闇瑕侀壌鏉冪殑涓鏂癸紝鍚戝皢琚壌鏉冪殑涓鏂瑰彂閫侀殢鏈轟覆錛?#8220;鎸戞垬”錛夛紝琚壌鏉冩柟灝嗚闅忔満涓插拰鑷繁鐨勯壌鏉冨彛浠ゅ瓧涓璧瘋繘琛?Hash 榪愮畻鍚庯紝榪旇繕閴存潈鏂癸紝閴存潈鏂瑰皢鏀跺埌鐨凥ash鍊間笌鍦ㄥ繁绔敤璇ラ殢鏈轟覆鍜屽鏂圭殑閴存潈鍙d護瀛楄繘琛?Hash 榪愮畻鐨勭粨鏋滅浉姣旇緝錛?#8220;璁よ瘉”錛夛紝濡傜浉鍚岋紝鍒欏彲鍦ㄧ粺璁′笂璁や負瀵規柟鎷ユ湁璇ュ彛浠ゅ瓧錛屽嵆閫氳繃閴存潈銆?/p>

POP3鍗忚涓氨鏈夎繖涓搴旂敤鐨勫吀鍨嬩緥瀛愶細

S: +OK POP3 server ready <1896.697170952@dbc.mtview.ca.us> 
C: APOP mrose c4c9334bac560ecc979e58001b3e22fb 
S: +OK maildrop has 1 message (369 octets) 
鍦ㄤ笂闈㈢殑涓孌礟OP3鍗忚浼氳瘽涓紝鍙屾柟閮藉叡浜殑瀵圭О瀵嗛挜錛堥壌鏉冨彛浠ゅ瓧錛夋槸tanstaaf錛屾湇鍔″櫒鍙戝嚭鐨勬寫鎴樻槸<1896.697170952@dbc.mtview.ca.us>錛屽鎴風瀵規寫鎴樼殑搴旂瓟鏄疢D5("<1896.697170952@dbc.mtview.ca.us>tanstaaf") = c4c9334bac560ecc979e58001b3e22fb錛岃繖涓紜殑搴旂瓟浣垮叾閫氳繃浜嗚璇併?/p>

 

鏁e垪綆楁硶闀挎湡浠ユ潵涓鐩村湪璁$畻鏈虹瀛︿腑澶ч噺搴旂敤錛岄殢鐫鐜頒唬瀵嗙爜瀛︾殑鍙戝睍錛屽崟鍚戞暎鍒楀嚱鏁板凡緇忔垚涓轟俊鎭畨鍏ㄩ鍩熶腑涓涓噸瑕佺殑緇撴瀯妯″潡錛屾垜浠湁鐞嗙敱娣卞叆鐮旂┒鍏惰璁$悊璁哄拰搴旂敤鏂規硶銆?/p>



eircQ 2010-12-02 23:08 鍙戣〃璇勮
]]>
C++闅忔満鏁扮敓鎴愭柟娉曪紙杞澆)http://m.shnenglu.com/softko/archive/2010/12/02/135228.htmleircQeircQThu, 02 Dec 2010 00:42:00 GMThttp://m.shnenglu.com/softko/archive/2010/12/02/135228.htmlhttp://m.shnenglu.com/softko/comments/135228.htmlhttp://m.shnenglu.com/softko/archive/2010/12/02/135228.html#Feedback0http://m.shnenglu.com/softko/comments/commentRss/135228.htmlhttp://m.shnenglu.com/softko/services/trackbacks/135228.html

鍘熸枃 http://www.cnblogs.com/finallyliuyu/archive/2010/10/11/1848130.html

涓銆丆++涓笉鑳戒嬌鐢╮andom()鍑芥暟

==================================================================================

鏈枃鐢遍潚鏉懼師鍒涘茍渚滸PL-V2鍙婂叾鍚庣畫鐗堟湰鍙戞斁錛岃漿杞借娉ㄦ槑鍑哄涓斿簲鍖呭惈鏈澹版槑銆?/p>

C++涓父鐢╮and()鍑芥暟鐢熸垚闅忔満鏁幫紝浣嗕弗鏍兼剰涔変笂鏉ヨ鐢熸垚鐨勫彧鏄吉闅忔満鏁幫紙pseudo-random integral number錛夈傜敓鎴愰殢鏈烘暟鏃墮渶瑕佹垜浠寚瀹氫竴涓瀛愶紝濡傛灉鍦ㄧ▼搴忓唴寰幆錛岄偅涔堜笅涓嬈$敓鎴愰殢鏈烘暟鏃惰皟鐢ㄤ笂涓嬈$殑緇撴灉浣滀負縐嶅瓙銆備絾濡傛灉鍒嗕袱嬈℃墽琛岀▼搴忥紝閭d箞鐢? 浜庣瀛愮浉鍚岋紝鐢熸垚鐨?#8220;闅忔満鏁?#8221;涔熸槸鐩稿悓鐨勩?/p>

鍦ㄥ伐紼嬪簲鐢ㄦ椂錛屾垜浠竴鑸皢緋葷粺褰撳墠鏃墮棿(Unix鏃墮棿)浣滀負縐嶅瓙錛岃繖鏍風敓鎴愮殑闅忔満鏁版洿鎺ヨ繎浜庡疄闄呮剰涔変笂鐨勯殢鏈烘暟銆傜粰涓涓嬩緥紼嬪涓嬶細

#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;

int main()
{
    double random(double,double);
    srand(unsigned(time(0)));
    for(int icnt = 0; icnt != 10; ++icnt)
        cout << "No." << icnt+1 << ": " << int(random(0,10))<< endl;
    return 0;
}

double random(double start, double end)
{
    return start+(end-start)*rand()/(RAND_MAX + 1.0);
}
/* 榪愯緇撴灉
* No.1: 3
* No.2: 9
* No.3: 0
* No.4: 9
* No.5: 5
* No.6: 6
* No.7: 9
* No.8: 2
* No.9: 9
* No.10: 6
*/
鍒╃敤榪欑鏂規硶鑳戒笉鑳藉緱鍒板畬鍏ㄦ剰涔変笂鐨勯殢鏈烘暟鍛紵浼間箮9鏈夌偣澶氬摝錛熷嵈娌℃湁1,4,7錛燂紒鎴戜滑鏉ュ仛涓涓鐜囧疄楠岋紝鐢熸垚1000涓囦釜闅忔満鏁幫紝鐪?-9榪?0涓暟鍑虹幇鐨勯鐜囨槸涓嶆槸澶ц嚧鐩稿悓鐨勩傜▼搴忓涓嬶細
#include <iostream>
#include <ctime>
#include <cstdlib>
#include <iomanip>
using namespace std;

int main()
{
    double random(double,double);
    int a[10] = {0};
    const int Gen_max = 10000000;
    srand(unsigned(time(0)));
   
    for(int icnt = 0; icnt != Gen_max; ++icnt)
        switch(int(random(0,10)))
        {
        case 0: a[0]++; break;
        case 1: a[1]++; break;
        case 2: a[2]++; break;
        case 3: a[3]++; break;
        case 4: a[4]++; break;
        case 5: a[5]++; break;
        case 6: a[6]++; break;
        case 7: a[7]++; break;
        case 8: a[8]++; break;
        case 9: a[9]++; break;
        default: cerr << "Error!" << endl; exit(-1);
        }
   
    for(int icnt = 0; icnt != 10; ++icnt)
        cout << icnt << ": " << setw(6) << setiosflags(ios::fixed) << setprecision(2) << double(a[icnt])/Gen_max*100 << "%" << endl;
   
    return 0;
}

double random(double start, double end)
{
    return start+(end-start)*rand()/(RAND_MAX + 1.0);
}
/* 榪愯緇撴灉
* 0: 10.01%
* 1:   9.99%
* 2:   9.99%
* 3:   9.99%
* 4:   9.98%
* 5: 10.01%
* 6: 10.02%
* 7: 10.01%
* 8: 10.01%
* 9:   9.99%
*/
鍙煡鐢ㄨ繖縐嶆柟娉曞緱鍒扮殑闅忔満鏁版槸婊¤凍緇熻瑙勫緥鐨勩?/p>

鍙︼細鍦↙inux涓嬪埄鐢℅CC緙栬瘧紼嬪簭錛屽嵆浣挎垜鎵ц浜?000000嬈¤繍綆楋紝鏄惁灝唕andom鍑芥暟瀹氫箟浜唅nline鍑芥暟浼間箮瀵圭▼搴忔病鏈変換浣曞獎鍝嶏紝鏈夌悊鐢辯浉淇★紝GCC宸茬粡涓烘垜浠仛浜嗕紭鍖栥備絾鏄啣鍐ヤ箣涓垜鍙堣寰楄鍋歩nline浼樺寲寰楀姞O3鎵嶈...

涓嶈錛屼簬鏄垜浠妸寰幆嬈℃暟鏀逛負10浜挎錛岀敤time鍛戒護鏌ョ湅鎵ц鏃墮棿錛?br>chinsung@gentoo ~/workspace/test/Debug $ time ./test
0: 10.00%
1: 10.00%
2: 10.00%
3: 10.00%
4: 10.00%
5: 10.00%
6: 10.00%
7: 10.00%
8: 10.00%
9: 10.00%

real    2m7.768s
user    2m4.405s
sys     0m0.038s
chinsung@gentoo ~/workspace/test/Debug $ time ./test
0: 10.00%
1: 10.00%
2: 10.00%
3: 10.00%
4: 10.00%
5: 10.00%
6: 10.00%
7: 10.00%
8: 10.00%
9: 10.00%

real    2m7.269s
user    2m4.077s
sys     0m0.025s

鍓嶄竴嬈′負榪涜inline浼樺寲鐨勬儏褰紝鍚庝竴嬈′負娌℃湁浣渋nline浼樺寲鐨勬儏褰紝涓ゆ緇撴灉鐩稿樊涓嶅ぇ錛岀敋鑷沖悇欏規寚鏍囧悗鑰呰繕瑕佸ソ涓浜涳紝涓嶇煡鏄綍緙樼敱...

=================================================================================


     random鍑芥暟涓嶆槸ANSI C鏍囧噯錛屼笉鑳藉湪gcc,vc絳夌紪璇戝櫒涓嬬紪璇戦氳繃銆? 鍙敼鐢–++涓嬬殑rand鍑芥暟鏉ュ疄鐜般?nbsp;    1銆丆++鏍囧噯鍑芥暟搴撴彁渚涗竴闅忔満鏁扮敓鎴愬櫒rand錛岃繑鍥?錛峈AND_MAX涔嬮棿鍧囧寑鍒嗗竷鐨勪吉闅忔満鏁存暟銆? RAND_MAX蹇呴』鑷沖皯涓?2767銆俽and()鍑芥暟涓嶆帴鍙楀弬鏁幫紝榛樿浠?涓虹瀛愶紙鍗寵搗濮嬪鹼級銆? 闅忔満鏁扮敓鎴愬櫒鎬繪槸浠ョ浉鍚岀殑縐嶅瓙寮濮嬶紝鎵浠ュ艦鎴愮殑浼殢鏈烘暟鍒椾篃鐩稿悓錛屽け鍘諱簡闅忔満鎰忎箟銆傦紙浣嗚繖鏍蜂究浜庣▼搴忚皟璇曪級
      2銆丆++涓彟涓鍑芥暟srand錛堬級錛屽彲浠ユ寚瀹氫笉鍚岀殑鏁幫紙鏃犵鍙鋒暣鏁板彉鍏冿級涓虹瀛愩備絾鏄鏋滅瀛愮浉鍚岋紝浼殢鏈烘暟鍒椾篃鐩稿悓銆備竴涓姙娉曟槸璁╃敤鎴瘋緭鍏ョ瀛愶紝浣嗘槸浠嶇劧涓嶇悊鎯熾?
     3銆?姣旇緝鐞嗘兂鐨勬槸鐢ㄥ彉鍖栫殑鏁幫紝姣斿鏃墮棿鏉ヤ綔涓洪殢鏈烘暟鐢熸垚鍣ㄧ殑縐嶅瓙銆?time鐨勫兼瘡鏃舵瘡鍒婚兘涓嶅悓銆傛墍浠ョ瀛愪笉鍚岋紝鎵浠ワ紝浜х敓鐨勯殢鏈烘暟涔熶笉鍚屻?
// C++闅忔満鍑芥暟錛圴C program錛?
#include <stdio.h>
#include <iostream>
#include <time.h>
using namespace std;
#define MAX 100
int main(int argc, char* argv[])
{        srand( (unsigned)time( NULL ) );//srand()鍑芥暟浜х敓涓涓互褰撳墠鏃墮棿寮濮嬬殑闅忔満縐嶅瓙.搴旇鏀懼湪for絳夊驚鐜鍙ュ墠闈?涓嶇劧瑕佸緢闀挎椂闂寸瓑寰?
銆銆 for (int i=0;i<10;i++)
銆銆 cout<<rand()%MAX<<endl;//MAX涓烘渶澶у鹼紝鍏墮殢鏈哄煙涓?~MAX-1
銆銆 return 0;
}
浜屻乺and()鐨勭敤娉?
     rand()涓嶉渶瑕佸弬鏁幫紝瀹冧細榪斿洖涓涓粠0鍒版渶澶ч殢鏈烘暟鐨勪換鎰忔暣鏁幫紝鏈澶ч殢鏈烘暟鐨勫ぇ灝忛氬父鏄浐瀹氱殑涓涓ぇ鏁存暟銆?榪欐牱錛屽鏋滀綘瑕佷駭鐢?~10鐨?0涓暣鏁幫紝鍙互琛ㄨ揪涓猴細
銆銆int N = rand() % 11;
     榪欐牱錛孨鐨勫煎氨鏄竴涓?~10鐨勯殢鏈烘暟錛屽鏋滆浜х敓1~10錛屽垯鏄繖鏍鳳細
銆銆int N = 1 + rand() % 10;
銆銆鎬葷粨鏉ヨ錛屽彲浠ヨ〃紺轟負錛?
銆銆a + rand() % n
     鍏朵腑鐨刟鏄搗濮嬪鹼紝n鏄暣鏁扮殑鑼冨洿銆?銆銆a + rand() % (b-a+1) 灝辮〃紺恒锝侊綖锝備箣闂寸殑涓涓殢鏈烘暟鑻ヨ0~1鐨勫皬鏁幫紝鍒欏彲浠ュ厛鍙栧緱0~10鐨勬暣鏁幫紝鐒跺悗鍧囬櫎浠?0鍗沖彲寰楀埌闅忔満鍒板崄鍒嗕綅鐨?0涓殢鏈哄皬鏁幫紝鑻ヨ寰楀埌闅忔満鍒扮櫨 鍒嗕綅鐨勯殢鏈哄皬鏁幫紝鍒欓渶瑕佸厛寰楀埌0~100鐨?0涓暣鏁幫紝鐒跺悗鍧囬櫎浠?00錛屽叾瀹冩儏鍐典緷姝ょ被鎺ㄣ?
     閫氬父rand()浜х敓鐨勯殢鏈烘暟鍦ㄦ瘡嬈¤繍琛岀殑鏃跺欓兘鏄笌涓婁竴嬈$浉鍚岀殑錛岃繖鏄湁鎰忚繖鏍瘋璁$殑錛屾槸涓轟簡渚夸簬紼嬪簭鐨勮皟璇曘傝嫢瑕佷駭鐢熸瘡嬈′笉鍚岀殑闅忔満鏁幫紝鍙互浣跨敤srand( seed )鍑芥暟榪涜闅忔満鍖栵紝闅忕潃seed鐨勪笉鍚岋紝灝辮兘澶熶駭鐢熶笉鍚岀殑闅忔満鏁般?
     濡傚ぇ瀹舵墍璇達紝榪樺彲浠ュ寘鍚玹ime.h澶存枃浠訛紝鐒跺悗浣跨敤srand(time(0))鏉ヤ嬌鐢ㄥ綋鍓嶆椂闂翠嬌闅忔満鏁板彂鐢熷櫒闅忔満鍖栵紝榪欐牱灝卞彲浠ヤ繚璇佹瘡涓ゆ榪愯鏃跺彲浠ュ緱鍒頒笉鍚岀殑闅忔満鏁板簭鍒?鍙涓ゆ榪愯鐨勯棿闅旇秴榪?縐?銆?/p>



eircQ 2010-12-02 08:42 鍙戣〃璇勮
]]>
trie鏍?-璇﹁Вhttp://m.shnenglu.com/softko/archive/2010/11/26/134701.htmleircQeircQFri, 26 Nov 2010 01:48:00 GMThttp://m.shnenglu.com/softko/archive/2010/11/26/134701.htmlhttp://m.shnenglu.com/softko/comments/134701.htmlhttp://m.shnenglu.com/softko/archive/2010/11/26/134701.html#Feedback0http://m.shnenglu.com/softko/comments/commentRss/134701.htmlhttp://m.shnenglu.com/softko/services/trackbacks/134701.html鏂囩珷浣滆咃細yx_th000 鏂囩珷鏉ユ簮錛?/span>Cherish_yimi (http://www.cnblogs.com/cherish_yimi/) 杞澆璇鋒敞鏄庯紝璋㈣阿鍚堜綔銆?br>鍏抽敭璇嶏細trie trie鏍?鏁版嵁緇撴瀯

    鍓嶅嚑澶╁涔犱簡騫舵煡闆嗗拰trie鏍戯紝榪欓噷鎬葷粨涓涓媡rie銆?br>    鏈枃璁ㄨ涓媯墊渶綆鍗曠殑trie鏍戯紝鍩轟簬鑻辨枃26涓瓧姣嶇粍鎴愮殑瀛楃涓詫紝璁ㄨ鎻掑叆瀛楃涓層佸垽鏂墠緙鏄惁瀛樺湪銆佹煡鎵懼瓧絎︿覆絳夊熀鏈搷浣滐紱鑷充簬trie鏍戠殑鍒犻櫎鍗曚釜鑺傜偣瀹炲湪鏄皯瑙侊紝鏁呭湪姝や笉鍋氳瑙c?/span>

l        Trie鍘熺悊

Trie鐨勬牳蹇冩濇兂鏄┖闂存崲鏃墮棿銆傚埄鐢ㄥ瓧絎︿覆鐨勫叕鍏卞墠緙鏉ラ檷浣庢煡璇㈡椂闂寸殑寮閿浠ヨ揪鍒版彁楂樻晥鐜囩殑鐩殑銆?/span>

l        Trie鎬ц川

濂藉浜鴻trie鐨勬牴鑺傜偣涓嶅寘鍚換浣曞瓧絎︿俊鎭紝鎴戞墍涔犳儻鐨則rie鏍硅妭鐐瑰嵈鏄寘鍚俊鎭殑錛岃屼笖璁や負榪欐牱涔熸柟渚匡紝涓嬮潰璇翠竴涓嬪畠鐨勬ц川 (鍩轟簬鏈枃鎵璁ㄨ鐨勭畝鍗晅rie鏍?

1.    瀛楃鐨勭鏁板喅瀹氭瘡涓妭鐐圭殑鍑哄害錛屽嵆branch鏁扮粍(絀洪棿鎹㈡椂闂存濇兂)

2.    branch鏁扮粍鐨勪笅鏍囦唬琛ㄥ瓧絎︾浉瀵逛簬a鐨勭浉瀵逛綅緗?/span>

3.    閲囩敤鏍囪鐨勬柟娉曠‘瀹氭槸鍚︿負瀛楃涓層?/span>

4.    鎻掑叆銆佹煡鎵劇殑澶嶆潅搴﹀潎涓篛(len),len涓哄瓧絎︿覆闀垮害

l        Trie鐨勭ず鎰忓浘

濡傚浘鎵紺猴紝璇rie鏍戝瓨鏈塧bc銆乨銆乨a銆乨da鍥涗釜瀛楃涓詫紝濡傛灉鏄瓧絎︿覆浼氬湪鑺傜偣鐨勫熬閮ㄨ繘琛屾爣璁般傛病鏈夊悗緇瓧絎︾殑branch鍒嗘敮鎸囧悜NULL





l       
Trie
Trie鐨勪紭鐐逛婦渚?/span>

宸茬煡n涓敱灝忓啓瀛楁瘝鏋勬垚鐨勫鉤鍧囬暱搴︿負10鐨勫崟璇?鍒ゆ柇鍏朵腑鏄惁瀛樺湪鏌愪釜涓蹭負鍙︿竴涓覆鐨勫墠緙瀛愪覆銆備笅闈㈠姣?縐嶆柟娉曪細

1.    鏈瀹規槗鎯沖埌鐨勶細鍗充粠瀛楃涓查泦涓粠澶村線鍚庢悳錛岀湅姣忎釜瀛楃涓叉槸鍚︿負瀛楃涓查泦涓煇涓瓧絎︿覆鐨勫墠緙錛屽鏉傚害涓篛(n^2)銆?/span>

2.    浣跨敤hash錛氭垜浠敤hash瀛樹笅鎵鏈夊瓧絎︿覆鐨勬墍鏈夌殑鍓嶇紑瀛愪覆銆傚緩绔嬪瓨鏈夊瓙涓瞙ash鐨勫鏉傚害涓篛(n*len)銆傛煡璇㈢殑澶嶆潅搴︿負O(n)* O(1)= O(n)銆?/span>

3.    浣? 鐢╰rie錛氬洜涓哄綋鏌ヨ濡傚瓧絎︿覆abc鏄惁涓烘煇涓瓧絎︿覆鐨勫墠緙鏃訛紝鏄劇劧浠,c,d....絳変笉鏄互a寮澶寸殑瀛楃涓插氨涓嶇敤鏌ユ壘浜嗐傛墍浠ュ緩绔媡rie鐨勫鏉? 搴︿負O(n*len)錛岃屽緩绔?鏌ヨ鍦╰rie涓槸鍙互鍚屾椂鎵ц鐨勶紝寤虹珛鐨勮繃紼嬩篃灝卞彲浠ユ垚涓烘煡璇㈢殑榪囩▼錛宧ash灝變笉鑳藉疄鐜拌繖涓姛鑳姐傛墍浠ユ葷殑澶嶆潅搴︿負 O(n*len)錛屽疄闄呮煡璇㈢殑澶嶆潅搴﹀彧鏄疧(len)銆?br>


瑙i噴涓涓? hash涓轟粈涔堜笉鑳藉皢寤虹珛涓庢煡璇㈠悓鏃舵墽琛岋紝渚嬪鏈変覆錛?11錛?11456杈撳叆錛屽鏋滆鍚屾椂鎵ц寤虹珛涓庢煡璇紝榪囩▼灝辨槸鏌ヨ911錛屾病鏈夛紝鐒跺悗瀛樺叆9銆? 91銆?11錛屾煡璇?11456錛屾病鏈夌劧鍚庡瓨鍏?114銆?1145銆?11456錛岃岀▼搴忔病鏈夎蹇嗗姛鑳斤紝騫朵笉鐭ラ亾911鍦ㄨ緭鍏ユ暟鎹腑鍑虹幇榪囥傛墍浠ョ敤 hash蹇呴』鍏堝瓨鍏ユ墍鏈夊瓙涓詫紝鐒跺悗for寰幆鏌ヨ銆?/span>

鑰宼rie鏍戜究鍙? 浠ワ紝瀛樺叆911鍚庯紝宸茬粡璁板綍911涓哄嚭鐜扮殑瀛楃涓詫紝鍦ㄥ瓨鍏?11456鐨勮繃紼嬩腑灝辮兘鍙戠幇鑰岃緭鍑虹瓟妗堬紱鍊掕繃鏉ヤ害鍙互錛屽厛瀛樺叆911456錛屽湪瀛樺叆911鏃訛紝 褰撴寚閽堟寚鍚戞渶鍚庝竴涓?鏃訛紝紼嬪簭浼氬彂鐜拌繖涓?宸茬粡瀛樺湪錛岃鏄?11蹇呭畾鏄煇涓瓧絎︿覆鐨勫墠緙錛岃鎬濇兂鏄垜鍦ㄥ仛pku涓婄殑3630涓彂鐜扮殑錛岃瑙佹湰鏂囬厤濂楃殑“鍏? 闂ㄧ粌涔?#8221;銆?/span>

l        Trie鐨勭畝鍗曞疄鐜?鎻掑叆銆佹煡璇?


 1
 2#include <iostream>
 3using namespace std;
 4
 5const int branchNum = 26//澹版槑甯擱噺 
 6int i;
 7
 8struct Trie_node
 9{
10    bool isStr; //璁板綍姝ゅ鏄惁鏋勬垚涓涓覆銆?/span>
11    Trie_node *next[branchNum];//鎸囧悜鍚勪釜瀛愭爲鐨勬寚閽?涓嬫爣0-25浠h〃26瀛楃
12    Trie_node():isStr(false)
13    {
14        memset(next,NULL,sizeof(next));
15    }

16}
;
17
18class Trie
19{
20public:
21    Trie();
22    void insert(const char* word);
23    bool search(char* word); 
24    void deleteTrie(Trie_node *root);
25private:
26    Trie_node* root;
27}
;
28
29Trie::Trie()
30{
31    root = new Trie_node();
32}

33
34void Trie::insert(const char* word)
35{
36    Trie_node *location = root;
37    while(*word)
38    {
39        if(location->next[*word-'a'== NULL)//涓嶅瓨鍦ㄥ垯寤虹珛
40        {
41            Trie_node *tmp = new Trie_node();
42            location->next[*word-'a'= tmp;
43        }
    
44        location = location->next[*word-'a']; //姣忔彃鍏ヤ竴姝ワ紝鐩稿綋浜庢湁涓涓柊涓茬粡榪囷紝鎸囬拡瑕佸悜涓嬬Щ鍔?/span>
45        word++;
46    }

47    location->isStr = true//鍒拌揪灝鵑儴,鏍囪涓涓覆
48}

49
50bool Trie::search(char *word)
51{
52    Trie_node *location = root;
53    while(*word && location)
54    {
55        location = location->next[*word-'a'];
56        word++;
57    }

58    return(location!=NULL && location->isStr);
59}

60
61void Trie::deleteTrie(Trie_node *root)
62{
63    for(i = 0; i < branchNum; i++)
64    {
65        if(root->next[i] != NULL)
66        {
67            deleteTrie(root->next[i]);
68        }

69    }

70    delete root;
71}

72
73void main() //綆鍗曟祴璇?/span>
74{
75    Trie t;
76    t.insert("a");         
77    t.insert("abandon");
78    char * c = "abandoned";
79    t.insert(c);
80    t.insert("abashed");
81    if(t.search("abashed"))
82        printf("true\n");
83}



eircQ 2010-11-26 09:48 鍙戣〃璇勮
]]>
甯哥敤鍑芥暟鐨勬簮鐮佸疄鐜?/title><link>http://m.shnenglu.com/softko/archive/2010/08/23/124416.html</link><dc:creator>eircQ</dc:creator><author>eircQ</author><pubDate>Mon, 23 Aug 2010 06:42:00 GMT</pubDate><guid>http://m.shnenglu.com/softko/archive/2010/08/23/124416.html</guid><wfw:comment>http://m.shnenglu.com/softko/comments/124416.html</wfw:comment><comments>http://m.shnenglu.com/softko/archive/2010/08/23/124416.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/softko/comments/commentRss/124416.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/softko/services/trackbacks/124416.html</trackback:ping><description><![CDATA[<p>;*************************************************************************************************************** <br>;       strlen returns the length of a null-terminated string in bytes, not including the null byte itself. <br>;       Algorithm: <br>;       int strlen (const char * str) <br>;       { <br>;           int length = 0; <br>; <br>;           while( *str++ ) <br>;                   ++length; <br>; <br>;           return( length ); <br>;       } <br> <br>;*************************************************************************************************************** <br>;       memcpy() copies a source memory buffer to a destination buffer. <br>;       Overlapping buffers are not treated specially, so propogation may occur. <br>;       Algorithm: <br>;       void * memcpy(void * dst, void * src, size_t count) <br>;       { <br>;               void * ret = dst; <br>;               /* <br>;                * copy from lower addresses to higher addresses <br>;                */ <br>;               while (count--) <br>;                       *dst++ = *src++; <br>; <br>;               return(ret); <br>;       } <br> <br>;*************************************************************************************************************** <br>;       memmove() copies a source memory buffer to a destination memory buffer. <br>;       This routine recognize overlapping buffers to avoid propogation. <br>;       For cases where propogation is not a problem, memcpy() can be used. <br>;       Algorithm: <br>;       void * memmove(void * dst, void * src, size_t count) <br>;       { <br>;               void * ret = dst; <br>;               if (dst <= src || dst >= (src + count)) { <br>;                       /* <br>;                        * Non-Overlapping Buffers <br>;                        * copy from lower addresses to higher addresses <br>;                        */ <br>;                       while (count--) <br>;                               *dst++ = *src++; <br>;                       } <br>;               else { <br>;                       /* <br>;                        * Overlapping Buffers <br>;                        * copy from higher addresses to lower addresses <br>;                        */ <br>;                       dst += count - 1; <br>;                       src += count - 1; <br>; <br>;                       while (count--) <br>;                               *dst-- = *src--; <br>;                       } <br>; <br>;               return(ret); <br>;       } <br> <br>;*************************************************************************************************************** <br>int strcmp(const char *str1,const char *str2) <br>{ <br>while((*str1==*str2)&&(*str1)) <br>{ <br>str1++; <br>str2++; <br>} <br>if((*str1==*str2)&&(!*str1)) //Same strings <br>return 0; <br>else if((*str1)&&(!*str2))  //Same but str1 longer <br>return -1; <br>else if((*str2)&&(!*str1)) //Same but str2 longer <br>return 1; <br>else <br>return((*str1>*str2)?-1:1); <br>} <br> <br>;*************************************************************************************************************** <br>char *strstr1(const char *str1, const char *str2) <br>{ <br>     char *cp = (char *)str1;  //type transfer <br>     char *s1, *s2; <br>     if(!str2)  <br>      return (char *)str1; <br>     while (cp) <br>     { <br>      s1 = cp; <br>      s2 = (char *)str2; <br>      while( !s1 && !s2 && !(*s1-*s2)) <br>      { <br>       s1++, s2++; <br>      } <br>      if(!s2)  <br>       return cp; <br>      else <br>       cp++; <br>     } <br>     return NULL; <br>} <br> <br>;*************************************************************************************************************** <br>*char *_itoa, *_ltoa, *_ultoa(val, buf, radix) - convert binary int to ASCII string <br>static void __cdecl xtoa (unsigned long val, char *buf, unsigned radix, int is_neg ) <br>{ <br>        char *p;                /* pointer to traverse string */ <br>        char *firstdig;         /* pointer to first digit */ <br>        char temp;              /* temp char */ <br>        unsigned digval;        /* value of digit */ </p> <p>        p = buf;</p> <p>        if (is_neg) { <br>            /* negative, so output '-' and negate */ <br>            *p++ = '-'; <br>            val = (unsigned long)(-(long)val); <br>        } </p> <p>        firstdig = p;           /* save pointer to first digit */</p> <p>        do { <br>            digval = (unsigned) (val % radix); <br>            val /= radix;       /* get next digit */ </p> <p>            /* convert to ascii and store */ <br>            if (digval > 9) <br>                *p++ = (char) (digval - 10 + 'a');  /* a letter */ <br>            else <br>                *p++ = (char) (digval + '0');       /* a digit */ <br>        } while (val > 0); </p> <p>        /* We now have the digit of the number in the buffer, but in reverse <br>           order.  Thus we reverse them now. */ </p> <p>        *p-- = '\0';            /* terminate string; p points to last digit */</p> <p>        do { <br>            temp = *p; <br>            *p = *firstdig; <br>            *firstdig = temp;   /* swap *p and *firstdig */ <br>            --p; <br>            ++firstdig;         /* advance to next two digits */ <br>        } while (firstdig < p); /* repeat until halfway */ <br>} <br>char * __cdecl _itoa ( int val, char *buf, int radix ) <br>{ <br>        if (radix == 10 && val < 0) <br>            xtoa((unsigned long)val, buf, radix, 1); <br>        else <br>            xtoa((unsigned long)(unsigned int)val, buf, radix, 0); <br>        return buf; <br>} <br>char * __cdecl _ltoa ( long val, char *buf, int radix ) <br>{ <br>        xtoa((unsigned long)val, buf, radix, (radix == 10 && val < 0)); <br>        return buf; <br>} <br> <br>;*************************************************************************************************************** <br>*long atol(char *nptr) - Convert string to long. Overflow is not detected. <br>long __cdecl _tstol(const _TCHAR *nptr ) <br>{ <br>        int c;              /* current char */ <br>        long total;         /* current total */ <br>        int sign;           /* if '-', then negative, otherwise positive */ <br>        while ( _istspace((int)(_TUCHAR)*nptr) ) <br>                 ++nptr;   /* skip whitespace */ </p> <p>        c = (int)(_TUCHAR)*nptr++; <br>        sign = c;           /* save sign indication */ <br>        if (c == _T('-') || c == _T('+')) <br>            c = (int)(_TUCHAR)*nptr++;    /* skip sign */ </p> <p>        total = 0;</p> <p>        while ( (c = _tchartodigit(c)) != -1 ) { <br>            total = 10 * total + c;     /* accumulate digit */ <br>            c = (_TUCHAR)*nptr++;    /* get next char */ <br>        } </p> <p>        if (sign == '-') <br>            return -total; <br>        else <br>            return total;   /* return result, negated if necessary */ <br>} <br>int __cdecl _tstoi( const _TCHAR *nptr ) <br>{ <br>        return (int)_tstol(nptr); <br>} <br> <br>;*************************************************************************************************************** <br>;performs a byteswap on an unsigned integer. <br>unsigned short __cdecl _byteswap_ushort(unsigned short i) <br>{ <br>    unsigned short j; <br>    j =  (i << 8) ; <br>    j += (i >> 8) ; <br>    return j; <br>} <br>unsigned long __cdecl _byteswap_ulong(unsigned long i) <br>{ <br>    unsigned int j; <br>    j =  (i << 24); <br>    j += (i <<  8) & 0x00FF0000; <br>    j += (i >>  8) & 0x0000FF00; <br>    j += (i >> 24); <br>    return j; <br>} <br> <br>;*************************************************************************************************************** <br>*char *bsearch() - do a binary search on an array <br>*Entry: <br>*       const char *key    - key to search for const char *base   - base of sorted array to search unsigned int num   - number of *elements in array unsigned int width - number of bytes per element int (*compare)()   - pointer to function that compares two <br>*array elements, returning neg when #1 < #2, pos when #1 > #2, and 0 when they are equal. Function is passed pointers to two <br>*array elements. <br>*Exit: <br>*       if key is found: returns pointer to occurrence of key in array <br>*       if key is not found:returns NULL <br> <br>void * __cdecl bsearch ( REG4 const void *key, const void *base, size_t num, size_t width, int (__cdecl *compare)(const void *, const void *)   ) <br>{ <br>        REG1 char *lo = (char *)base; <br>        REG2 char *hi = (char *)base + (num - 1) * width; <br>        REG3 char *mid; <br>        size_t half; <br>        int result; </p> <p>        while (lo <= hi) <br>                if (half = num / 2) <br>                { <br>                        mid = lo + (num & 1 ? half : (half - 1)) * width; <br>                        if (!(result = (*compare)(key,mid))) <br>                                return(mid); <br>                        else if (result < 0) <br>                        { <br>                                hi = mid - width; <br>                                num = num & 1 ? half : half-1; <br>                        } <br>                        else    { <br>                                lo = mid + width; <br>                                num = half; <br>                        } <br>                } <br>                else if (num) <br>                        return((*compare)(key,lo) ? NULL : lo); <br>                else <br>                        break; </p> <p>        return(NULL); <br>} <br> <br>;*************************************************************************************************************** <br>void __cdecl _tmakepath (register _TSCHAR *path, const _TSCHAR *drive, const _TSCHAR *dir, <br>const _TSCHAR *fname, const _TSCHAR *ext  ) <br>{ <br>     register const _TSCHAR *p; <br>     /* copy drive */ <br>     if (drive && *drive) { <br>                *path++ = *drive; <br>                *path++ = _T(':'); <br>        } </p> <p>        /* copy dir */ <br>        if ((p = dir) && *p) { <br>                do { <br>                        *path++ = *p++; <br>                }while (*p); <br>                if (*(p-1) != _T('/') && *(p-1) != _T('\\')) { <br>                        *path++ = _T('\\'); <br>                } <br>        } </p> <p>        /* copy fname */ <br>        if (p = fname) { <br>                while (*p) { <br>                        *path++ = *p++; <br>                } <br>        } </p> <p>        /* copy ext, including 0-terminator - check to see if a '.' needs to be inserted. */ <br>        if (p = ext) { <br>                if (*p && *p != _T('.')) { <br>                        *path++ = _T('.'); <br>                } <br>                while (*path++ = *p++) <br>                        ; <br>        } <br>        else { <br>                /* better add the 0-terminator */ <br>                *path = _T('\0'); <br>        } <br>} </p> <br><img src ="http://m.shnenglu.com/softko/aggbug/124416.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/softko/" target="_blank">eircQ</a> 2010-08-23 14:42 <a href="http://m.shnenglu.com/softko/archive/2010/08/23/124416.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>涓ゅ崟鍚戦摼琛ㄧ浉浜?/title><link>http://m.shnenglu.com/softko/archive/2010/08/18/123811.html</link><dc:creator>eircQ</dc:creator><author>eircQ</author><pubDate>Wed, 18 Aug 2010 03:26:00 GMT</pubDate><guid>http://m.shnenglu.com/softko/archive/2010/08/18/123811.html</guid><wfw:comment>http://m.shnenglu.com/softko/comments/123811.html</wfw:comment><comments>http://m.shnenglu.com/softko/archive/2010/08/18/123811.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/softko/comments/commentRss/123811.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/softko/services/trackbacks/123811.html</trackback:ping><description><![CDATA[   1. /***********************************/  <br>   2. /* 鍔熻兘錛氭眰涓や釜鍗曢摼琛ㄦ槸鍚︾浉浜ゅ拰浜ょ偣*/  <br>   3. /* 杞澆鑷狢SDN鍗氬                  * /  <br>   4. /* 鏃ユ湡錛?010/03/29                */  <br>   5. /***********************************/  <br>   6.   <br>   7.   <br>   8. Node* find(Node* head1,Node* head2)     <br>   9. {     <br>  10.      Node *p1=head1,*p2=head2;     <br>  11.     int m=0,n=0;     <br>  12.     while(p1)//O(len1)     <br>  13.      {<br>  14.          p1=p1->next;     <br>  15.          m++;<br>  16.      }<br>  17.     while(p2)//O(len2)<br>  18.      {<br>  19.          p2=p2->next;     <br>  20.          n++;     <br>  21.      }<br>  22.      p1=head1;<br>  23.      p2=head2;<br>  24.           <br>  25.     if(m>n)<br>  26.      {     <br>  27.         for(i=0;i<m-n;i++)     <br>  28.              p1=p1->next;     <br>  29.      }<br>  30.     else<br>  31.      {<br>  32.         for(i=0;i<n-m;i++) <br>  33.                p2=p2->next;<br>  34.      }//O(abs(len1-len2))<br>  35.     while(p1!=p2)<br>  36.      {<br>  37.          p1=p1->next;<br>  38.          p2=p2->next;     <br>  39.      }//O(min(len1,len2))     <br>  40.     return p1;<br>  41. } <br><img src ="http://m.shnenglu.com/softko/aggbug/123811.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/softko/" target="_blank">eircQ</a> 2010-08-18 11:26 <a href="http://m.shnenglu.com/softko/archive/2010/08/18/123811.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>c涓庢眹緙栵紝浠ュ強宓屽叆寮忓伐紼嬪笀搴旀敞鎰忕殑闂http://m.shnenglu.com/softko/archive/2010/07/25/121229.htmleircQeircQSun, 25 Jul 2010 03:43:00 GMThttp://m.shnenglu.com/softko/archive/2010/07/25/121229.htmlhttp://m.shnenglu.com/softko/comments/121229.htmlhttp://m.shnenglu.com/softko/archive/2010/07/25/121229.html#Feedback0http://m.shnenglu.com/softko/comments/commentRss/121229.htmlhttp://m.shnenglu.com/softko/services/trackbacks/121229.htmlc涓庢眹緙栵紝浠ュ強宓屽叆寮忓伐紼嬪笀搴旀敞鎰忕殑闂

浜虹敓鍝茬悊涓庣粡楠?/a> 2007-07-25 13:31:04 闃呰41 璇勮1 瀛楀彿錛?span class="ul sep fc04">澶?/span>涓?/span>灝?/span>

銆姹囩紪鍜宑鍚屾牱閲嶈錛岀浉浜掗厤鍚堬紝緙轟竴涓嶅彲錛?

銆銆姹囩紪鐨勯噸瑕佹э細

鈼?甯姪浣犱粠鏍規湰涓婂交搴曞拰瀹屽叏浜嗚В鑺墖鐨勭粨鏋勫拰鎬ц兘錛屼互鍙婂伐浣滃師鐞嗭紝濡備綍浣跨敤銆?
鈼?鍦ㄥ皬鐨勮姱鐗囦笂瀹炵幇灝忕殑緋葷粺銆?
鈼?緋葷粺鐨勮皟璇曘傚敖綆′綘浣跨敤浜嗛珮綰ц璦錛屽湪璋冭瘯涓彲浠ュ府鍔╀綘浜嗚ВC浠g爜鐨勬ц兘鍜岀壒鐐癸紝鐢氳嚦鎵懼埌浣跨敤寮鍙戝鉤鍙版湰韜殑BUG銆?
鈼?緙栧啓鏃跺簭瑕佹眰涓ユ牸鐨勪唬鐮侊紝瀹炵幇涓浜涢珮綰ц璦涓嶆槗瀹炵幇鐨勫姛鑳姐?

銆銆灝嗗嚭鐗堢殑AVR128鐨勪功閲岄潰錛岀浜旂珷涓富浣跨敤C浣滀負緋葷粺寮鍙戣璁¤璦錛岃繖鏄洜涓篗128鐨勯熷害楂橈紝鍐呴儴鏈?K鐨凴AM錛?28KFLASH錛? 閫傚悎浜庡疄鐜版瘮杈冮珮綰х殑搴旂敤錛屾墍浠ラ噰鐢–璇█浣滀負緋葷粺寮鍙戠殑璁捐璇█銆備絾浣滀負寮鍙戝伐紼嬪笀鏉ヨ錛岀啛鎮塎128鐨勭粨鏋勫拰搴旂敤鍘熺悊錛屽熀鏈帉鎻″畠鐨勬眹緙栬璦鏄繀瑕佺殑 鍩虹銆?

銆銆浠庣洰鍓嶇殑鎶鏈拰搴旂敤鍙戝睍鏉ョ湅錛屽紜歡宸ョ▼甯堢殑瑕佹眰瓚婃潵瓚婇珮銆備互鎴戠殑瑙傜偣錛屼綔涓哄崟鐗囨満鍜屽祵鍏ュ紡緋葷粺寮鍙戠湡姝g殑楂樻墜錛屽簲鍏峰浠ヤ笅鍑犱釜鏂歸潰鐨勭患鍚堣兘鍔涳細

鈼?紜歡銆傛ā鎷熴佹暟瀛楃數璺殑闆勫帤鍩虹錛屼簡瑙h窡韙幇鍦ㄥ競鍦轟笂鐨勫悇縐嶅厓鍣ㄤ歡鐨勫簲鐢ㄥ拰鍙戝睍錛岃兘澶熻繘琛屽彲闈犮佸畬鍠勭殑鐢佃礬璁捐浠ュ強PCB鐨勮璁°?
鈼? 杞歡銆備笉浠呴渶瑕佺簿閫氭眹緙栬璦錛屼篃瑕佺簿閫欳璇█錛岃鏈夊ソ鐨勫崟鐗囨満緋葷粺紼嬪簭璁捐鐞嗗康鍜岃兘鍔涳紝瀛︽牎涓鐨勯偅浜涘垎鏀粨鏋勩佸驚鐜粨鏋勭瓑鍩烘湰鍘熺悊榪滆繙涓嶅錛佽鏈夊熀鏈殑 鏁版嵁緇撴瀯鐨勭煡璇嗐傚惁鍒欎綘濡備綍璁捐瀹炵幇USB HOST璇籙鐩樼殑鎺ュ彛錛熷浣曞疄鐜板祵鍏ュ紡WEB緋葷粺錛熶互鍙婂浣曚嬌鐢ㄧ湡姝d簡瑙e拰浣跨敤RTOS錛?
鈼?鍏峰璁$畻鏈虹綉緇滃拰鏁板瓧閫氫俊鐨勫熀紜鐭ヨ瘑錛屼粠鏍規湰涓婄啛鎮夊拰浜嗚В鍚勭鍗忚鐨勬瀯閫犲拰瀹炵幇錛屽錛歎ART銆丷S232銆丼PI銆両2C銆乁SB銆両EEE802銆乀CP/IP絳夈?
鈼?璁$畻鏈哄簲鐢ㄧ殑楂樻墜銆?
鈼?鐔熺粌闃呰鑻辨枃璧勬枡銆?
鈼?鐑埍鍜屽枩嬈㈢數瀛愭妧鏈紝鍏峰鍒昏嫤綺劇銆佽笍韙忓疄瀹烇紝涓嶅紕铏氫綔鍋囷紝涓嶆誕韜併傚鍔ㄦ墜錛屽嫟瀹炶返銆傛湁寮虹儓鐨勪笓涓氬拰閽葷爺綺劇銆傛渶鍚庝竴鏉℃渶閲嶈錛?



eircQ 2010-07-25 11:43 鍙戣〃璇勮
]]>
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲男人第一av网站| 久久久久久亚洲综合影院红桃 | 亚洲欧美日韩在线不卡| 最新日韩在线视频| 黄色成人av在线| 国模精品一区二区三区色天香| 国产精品中文字幕欧美| 国产精品一区二区在线观看网站 | 亚洲裸体在线观看| 亚洲精品欧美在线| 99re热精品| 亚洲午夜久久久久久久久电影网| 99在线精品免费视频九九视| 夜夜爽夜夜爽精品视频| 在线亚洲国产精品网站| 亚洲一区在线免费| 久久久99国产精品免费| 久久在线91| 亚洲国产一区二区视频| 亚洲精品乱码久久久久| 亚洲视频欧美视频| 久久精品国产精品| 欧美交受高潮1| 国产精品超碰97尤物18| 国内精品久久久久影院 日本资源| 亚洲经典一区| 亚洲女人天堂av| 美女91精品| 亚洲乱码国产乱码精品精可以看| 亚洲综合精品四区| 麻豆9191精品国产| 国产精品久久亚洲7777| 一区二区在线视频观看| 中文在线资源观看网站视频免费不卡 | 免费成人网www| 一区二区三区精品在线| 久久精品视频va| 欧美丝袜一区二区三区| 亚洲第一偷拍| 欧美一二区视频| 亚洲第一黄网| 午夜在线精品偷拍| 欧美日韩免费网站| 亚洲国产婷婷| 久久男人资源视频| 亚洲免费在线观看| 亚洲欧美一区二区在线观看| 欧美成在线观看| 亚洲第一在线| 久久久久久久网| 亚洲影院免费| 国产精品卡一卡二卡三| 亚洲视频在线观看视频| 最新日韩在线| 蜜月aⅴ免费一区二区三区 | 欧美国产日产韩国视频| 黄色成人在线网址| 久久男人av资源网站| 久久av一区二区三区| 国产一区二区0| 久久成人资源| 亚洲一区二区三区高清| 国产精品亚洲综合| 亚洲免费在线视频| 亚洲你懂的在线视频| 国产精品国产三级国产aⅴ浪潮| 亚洲精品在线视频| 欧美成人亚洲成人| 久久国产天堂福利天堂| 一区二区三区成人精品| 欧美色综合天天久久综合精品| 亚洲高清在线精品| 久久久久久9| 亚洲欧美日韩电影| 亚洲毛片在线看| 性做久久久久久久免费看| 国产精品jizz在线观看美国| 99视频精品| 91久久精品www人人做人人爽| 久久天堂精品| 在线播放亚洲| 另类激情亚洲| 久久久久久亚洲精品中文字幕| 欧美激情精品久久久久久久变态 | 欧美日韩国产色综合一二三四| 1204国产成人精品视频| 久久精品久久99精品久久| 亚洲一级在线观看| 国产精品亚洲综合天堂夜夜 | 开元免费观看欧美电视剧网站| 香蕉免费一区二区三区在线观看| 国产精品久久久久久久app| 亚洲欧美一级二级三级| 亚洲永久免费观看| 久久影院午夜论| 国产伦精品一区二区三区高清版| 午夜国产精品视频免费体验区| 国产精品99久久久久久久vr| 媚黑女一区二区| 午夜精品福利在线| 亚洲国产日韩欧美在线99| 欧美一区二区三区精品| 久久久蜜桃一区二区人| 日韩一级黄色av| 亚洲精选在线观看| 国产视频亚洲精品| 91久久久久久久久| 影音先锋欧美精品| 欧美日韩三级电影在线| 久久偷窥视频| av成人黄色| 欧美屁股在线| 亚洲国产日韩欧美| 欧美激情小视频| 久久久精品一品道一区| 亚洲高清在线观看| 亚洲一区二区在线视频| 91久久在线视频| 国产一区二区高清不卡| 欧美一区二区私人影院日本| 亚洲免费一在线| 久久久xxx| 久久国产乱子精品免费女| 一区二区三区回区在观看免费视频| 亚洲一二三区视频在线观看| 久久精品官网| 亚洲一二三四久久| 久久视频一区二区| 最新热久久免费视频| 亚洲精品国久久99热| 久久精品91久久香蕉加勒比| 国产精品美女一区二区在线观看| 美女久久一区| 国产九区一区在线| 中文在线一区| 亚洲欧美视频一区二区三区| 国产精品男女猛烈高潮激情| 国产午夜精品理论片a级大结局 | 一区二区毛片| 亚洲欧美日韩精品久久亚洲区 | 欧美不卡激情三级在线观看| 欧美精品在线网站| 狂野欧美性猛交xxxx巴西| 国产精品久久久久久久久| 亚洲成人直播| 一区二区三区在线观看国产| 亚洲视频免费在线| 狠狠色综合一区二区| 欧美一区不卡| 欧美一区二区三区日韩| 欧美日韩在线精品一区二区三区| 欧美 日韩 国产 一区| 国产一区二三区| 亚洲一区3d动漫同人无遮挡| 亚洲婷婷国产精品电影人久久| 欧美成人精品在线播放| 欧美成人tv| 伊伊综合在线| 久久久久久久综合日本| 久久免费视频网站| 国产一区二区三区无遮挡| 欧美高清视频一区二区三区在线观看| 欧美性开放视频| 欧美成人亚洲| 亚洲人www| 久久在线观看视频| 欧美高清日韩| 亚洲另类自拍| 欧美激情视频一区二区三区免费| 欧美a级一区| 亚洲黄色毛片| 欧美成人在线免费视频| 亚洲高清av| 一区二区三区四区国产| 欧美日韩一区二区免费视频| 一本大道av伊人久久综合| 亚洲女同性videos| 欧美日韩国产在线| 亚洲最新色图| 久久国产黑丝| 亚洲激情在线| 国产精品激情| 欧美亚洲专区| 欧美激情视频在线免费观看 欧美视频免费一 | 久久久www成人免费毛片麻豆| 亚洲韩国精品一区| 加勒比av一区二区| 久久精品盗摄| 一区二区三区.www| 亚洲欧美日韩精品久久| 亚洲欧美日韩在线一区| 国产精品视频男人的天堂| 亚洲欧美日韩国产| 欧美国产激情| 亚洲一二区在线| 国内精品99| 欧美日本视频在线| 久久精品国产久精国产爱| 亚洲精品黄色| 欧美尤物一区|