<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      撒列實現關鍵字過濾,速度可快了

      一直對搜索、過濾很好奇,覺得他們很有技術含量,只有非常NB的人才能做。很想知道他們的原理,實現這樣的功能,設計是不是必須得非常NB非常奇特,代碼是不是要寫得非常好,性能非常高。總之這一切都不是我這樣級別的人能做的。直到我看了《編程珠璣(第二版)》中的這么一段文字:

      “假定我們可以在執行搜索之前對文本內容進行預處理,那么我們可以建立一個撒列表(或者搜索樹),為文檔中的每個不同的單詞建立索引,并為每個單詞的每次出現存儲一個鏈表,這樣的逆向索引使得程序可以很快的找到給定的單詞,為了查找短語,我們可以對其中包含的每個單詞的鏈表進行交叉,但實現起來比較復雜,速度可能會很慢。(不過一些網頁搜索引擎用的就是這樣的方法)”

      思路就這么簡單,我靠!連有的搜索引擎也用這種思路。這種撒列的方式處理關鍵字過濾速度的確是蠻快,10000個字組織成一個撒列表也就幾毫秒,只要你預分配的內存較好,基本上沒什么操作,就是向內存中填數據。在撒列表中判斷一個鍵是否存在的時間復雜度為O(1),其實還可以自己重寫Dictionary<TKey, TValue>,關鍵字過濾的效率可能會更好點。

      實現的思路比較簡單:

      1:處理關鍵字,生成一個關鍵字字典表

      2:處理要過濾的文本,同樣生成一個字典表

      3:將文本,兩個字典表三者進行比對

       

      現在來測試下面一段文字(我上篇博客中的一段文字):

      "看云風博客關于解決12306并發問題的啟發:我現在做駿卡接口,可能出現并發問題,就是一個訂單可能向我們的接口發送多個請求,而我現在做的方法是去數據庫中對應的表驗證,看訂單是否存在,如果存在就提示一下,如果不存在按流程走,但是這個樣每來一個訂單我都需要去數據庫查,如果我在內存中維護一個訂單集合,這樣就能很快解決判斷訂單是否存在的問題,慣性思維太嚴重了,什么都去數據庫查,這樣的性能是最差的,其實很多問題在內存中就可以搞定的,最近還有一個特別感受,不要做井底之蛙,多看牛人的東西收獲真的比自己埋頭寫代碼進步快很多,其實很多時候我寫的程序性能差,效率低都是因為方法的原因,沒有找到好的方法,沒有靈光一閃的感覺,用了最爛的方法解決問題"

       

      測試代碼:

      class Program
      {
      static void Main(string[] args)
      {
      string keys = "云風博客|并發問題|最爛的方法|內存|集合|數據庫|性能";

      using (new OperationTimer("keyWords:"))
      {
      WordSearch ws = new WordSearch(keys);
      string str = "看云風博客關于解決12306并發問題的啟發:我現在做駿卡接口,可能出現并發問題,就是一個訂單可能向我們的接口發送多個請求,而我現在做的方法是去數據庫中對應的表驗證,看訂單是否存在,如果存在就提示一下,如果不存在按流程走,但是這個樣每來一個訂單我都需要去數據庫查,如果我在內存中維護一個訂單集合,這樣就能很快解決判斷訂單是否存在的問題,慣性思維太嚴重了,什么都去數據庫查,這樣的性能是最差的,其實很多問題在內存中就可以搞定的,最近還有一個特別感受,不要做井底之蛙,多看牛人的東西收獲真的比自己埋頭寫代碼進步快很多,其實很多時候我寫的程序性能差,效率低都是因為方法的原因,沒有找到好的方法,沒有靈光一閃的感覺,用了最爛的方法解決問題";
      ConsoleColor color = Console.ForegroundColor;
      Console.ForegroundColor = ConsoleColor.Red;
      Console.WriteLine("原文:");
      Console.ForegroundColor = color;
      Console.WriteLine(str);
      Console.WriteLine();
      Console.ForegroundColor = ConsoleColor.Red;
      Console.WriteLine("過濾后:");
      Console.ForegroundColor = color;
      Console.WriteLine(ws.Filter(str));
      }
      Console.Read();
      }

      }

      輸出結果截圖:

       

      另外送上一個簡單實用的代碼運行時間測試類,測試某段代碼的運行時間可是很方便的哦

      using System;
      using System.Diagnostics;

      namespace WordFilter
      {
      /// <summary>
      /// 測試代碼運行時間幫組類
      /// </summary>
      public class OperationTimer : IDisposable
      {
      private string Text;
      private Int32 collectCount;
      private Stopwatch stopWatch;

      public OperationTimer(string txt)
      {
      PerpareForOperation();
      this.Text = txt;
      collectCount = GC.CollectionCount(0);
      stopWatch = new Stopwatch();
      stopWatch.Start();
      }

      public void Dispose()
      {
      stopWatch.Stop();
      Console.WriteLine("{0} Milliseconds (GCs={1}) {2}", stopWatch.ElapsedMilliseconds, GC.CollectionCount(0) - collectCount, Text);
      }

      private static void PerpareForOperation()
      {
      GC.Collect();
      GC.WaitForPendingFinalizers();
      GC.Collect();
      }
      }
      }

       

      實現撒列的部分核心代碼:

            public Dictionary<char, IList<char>> HandleKeyWords(IEnumerable<string> text, int size)
      {
      Dictionary<char, IList<char>> dicList = new Dictionary<char, IList<char>>(size);//預分配非常關鍵
      int len, i;
      foreach (string s in text)
      {
      if (s == string.Empty)
      {
      continue;
      }
      len = s.Length - 1;
      for (i = 0; i < len; i++)
      {
      if (dicList.ContainsKey(s[i]))
      {
      if (dicList[s[i]] != null && !dicList[s[i]].Contains(s[i + 1]))
      {
      dicList[s[i]].Add(s[i + 1]);
      }
      }
      else
      {
      dicList.Add(s[i], new List<char>(2) { s[i + 1] });
      }
      }
      if (!dicList.ContainsKey(s[len]))
      {
      dicList.Add(s[len], null);
      }
      }

      return dicList;
      }

       

      我也想貼出全部代碼,但是還有一些BUG,功能還有待完善,完善一些了會貼出源碼的,在截一張圖給大家看看

       

      關鍵字過濾,希望能過濾掉大家不想聽的,陳太漢祝大家新年快樂

       

      作者:陳太漢

      博客:http://www.rzrgm.cn/hlxs/

      posted @ 2012-01-20 17:20  古文觀芷  閱讀(4850)  評論(16)    收藏  舉報
      主站蜘蛛池模板: 成人区人妻精品一区二区| 日韩伦理片| 日本边添边摸边做边爱喷水| 人人干人人噪人人摸| 欧美搡bbbbb搡bbbbb| 国产小受被做到哭咬床单GV| 柘城县| 国产99视频精品免费视频6| 成人福利国产午夜AV免费不卡在线| 毛茸茸性xxxx毛茸茸毛茸茸| 亚洲一区中文字幕人妻| 一区二区三区四区亚洲自拍| 久久综合色之久久综合色| 99精品伊人久久久大香线蕉| 国产精品中文av专线| 国产口爆吞精在线视频2020版| 九九热在线精品免费视频| 99久久99这里只有免费费精品| 欧美xxxxx高潮喷水| 亚洲中文字幕综合小综合| av中文字幕在线二区| 阿合奇县| 欧洲性开放老太大| 久久精品国产亚洲AV麻豆长发| 少妇高潮喷水正在播放| 色欲狠狠躁天天躁无码中文字幕| 国产精品久久久久久久网| 99久久亚洲综合精品成人网| 一面膜上边一面膜下边视频| 亚洲午夜无码久久久久蜜臀AV| 国产综合久久99久久| 色欧美片视频在线观看| 女同久久一区二区三区| 国产精品高清中文字幕| 国产精品黄大片在线播放| 久久夜夜免费视频| 国产亚洲精品第一综合| 久久亚洲综合精品成人网| 亚洲中文字幕无码中文字 | 久久精品女人天堂av| 国产一区二区不卡精品视频|