国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網站 > 建站經驗 > 正文

C#實現的字符、串相似度對比類

2019-11-02 15:23:46
字體:
來源:轉載
供稿:網友

   本類適用于比較2個字符的相似度,代碼如下:

  ?

        using System;

  using System.Collections.Generic;

  using System.Text;

  public class StringCompute

  {

  #region 私有變量

  ///

  /// 字符串1

  ///

  private char[] _ArrChar1;

  ///

  /// 字符串2

  ///

  private char[] _ArrChar2;

  ///

  /// 統計結果

  ///

  private Result _Result;

  ///

  /// 開始時間

  ///

  private DateTime _BeginTime;

  ///

  /// 結束時間

  ///

  private DateTime _EndTime;

  ///

  /// 計算次數

  ///

  private int _ComputeTimes;

  ///

  /// 算法矩陣

  ///

  private int[,] _Matrix;

  ///

  /// 矩陣列數

  ///

  private int _Column;

  ///

  /// 矩陣行數

  ///

  private int _Row;

  #endregion

  #region 屬性

  public Result ComputeResult

  {

  get { return _Result; }

  }

  #endregion

  #region 構造函數

  public StringCompute(string str1, string str2)

  {

  this.StringComputeInit(str1, str2);

  }

  public StringCompute()

  {

  }

  #endregion

  #region 算法實現

  ///

  /// 初始化算法基本信息

  ///

  /// 字符串1

  /// 字符串2

  private void StringComputeInit(string str1, string str2)

  {

  _ArrChar1 = str1.ToCharArray();

  _ArrChar2 = str2.ToCharArray();

  _Result = new Result();

  _ComputeTimes = 0;

  _Row = _ArrChar1.Length + 1;

  _Column = _ArrChar2.Length + 1;

  _Matrix = new int[_Row, _Column];

  }

  ///

  /// 計算相似度

  ///

  public void Compute()

  {

  //開始時間

  _BeginTime = DateTime.Now;

  //初始化矩陣的第一行和第一列

  this.InitMatrix();

  int intCost = 0;

  for (int i = 1; i < _Row; i++)

  {

  for (int j = 1; j < _Column; j++)

  {

  if (_ArrChar1[i - 1] == _ArrChar2[j - 1])

  {

  intCost = 0;

  }

  else

  {

  intCost = 1;

  }

  //關鍵步驟,計算當前位置值為左邊+1、上面+1、左上角+intCost中的最小值

  //循環遍歷到最后_Matrix[_Row - 1, _Column - 1]即為兩個字符串的距離

  _Matrix[i, j] = this.Minimum(_Matrix[i - 1, j] + 1, _Matrix[i, j - 1] + 1, _Matrix[i - 1, j - 1] + intCost);

  _ComputeTimes++;

  }

  }

  //結束時間

  _EndTime = DateTime.Now;

  //相似率 移動次數小于最長的字符串長度的20%算同一題

  int intLength = _Row > _Column ? _Row : _Column;

  _Result.Rate = (1 - (decimal)_Matrix[_Row - 1, _Column - 1] / intLength);

  _Result.UseTime = (_EndTime - _BeginTime).ToString();

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 绥芬河市| 中西区| 东丰县| 阿克陶县| 石城县| 上栗县| 东丰县| 崇州市| 舞阳县| 石首市| 阜平县| 汕尾市| 嘉鱼县| 根河市| 广西| 雷波县| 恩平市| 仪征市| 固原市| 新干县| 集贤县| 塘沽区| 伊吾县| 日土县| 柘城县| 隆安县| 绥江县| 柳河县| 临漳县| 绍兴市| 青海省| 安西县| 安溪县| 枝江市| 黑水县| 梁平县| 汤阴县| 藁城市| 留坝县| 鄂托克旗| 临沂市|