⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unit1.pas

📁 让你知道什么是 HASH算法 ,我测试了一下,再大数据,通过HASH算法来查找,有时只要查找一次!
💻 PAS
字号:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, HashTrie;

type
  TForm1 = class(TForm)
    Button2: TButton;
    Memo1: TMemo;
    Edit1: TEdit;
    Label1: TLabel;
    Button1: TButton;
    procedure Button2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    ht: TStringHashTrie;
  public
    procedure TraverseMeth(UserData: Pointer; const Value: string;
      Data: TObject; var Done: Boolean);
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

var
  MaxLevel, PeakCnt, FillCnt, EmptyCnt: integer;
  LenStat: TLenStat;

procedure TraverseProc(UserData: Pointer; const Value: string;
  Data: TObject; var Done: Boolean);
type
  PTextFile = ^TextFile;
begin
  writeln(PTextFile(UserData)^,Value);
end;

procedure TForm1.TraverseMeth(UserData: Pointer; const Value: string;
  Data: TObject; var Done: Boolean);
type
  PTextFile = ^TextFile;
begin
  writeln(PTextFile(UserData)^,Value);
end;

procedure TForm1.Button2Click(Sender: TObject);
var f: TextFile;
    S: string;
begin
  // traverse
  AssignFile(f,'dic.out');
  try
   Rewrite(f);
   //ht.Traverse(@f,TraverseProc);
   ht.Traverse(@f,TraverseMeth);
  finally
   CloseFile(f);
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
var f: TextFile;
    S: string;
    j,ipos: integer;
begin
  ht:=TStringHashTrie.Create;
  // fill test
  AssignFile(f,'dic.txt');
  try
   Reset(f);
   ipos:=0;
   while not Eof(f) do begin
     readln(f,S);
     ht.Add(S,Pointer(ipos));
     Inc(ipos);
   end;
  finally
   CloseFile(f);
  end;
  // count stats
  MaxLevel:=0; PeakCnt:=0; FillCnt:=0; EmptyCnt:=0;
  for j:=1 to BucketSize do LenStat[j]:=0;
  Stat(ht, MaxLevel, PeakCnt, FillCnt, EmptyCnt, LenStat);
  Memo1.Lines.Add('MaxLevel: '+IntToStr(MaxLevel));
  Memo1.Lines.Add('PeakCnt: '+IntToStr(PeakCnt));
  Memo1.Lines.Add('FillCnt: '+IntToStr(FillCnt));
  Memo1.Lines.Add('EmptyCnt: '+IntToStr(EmptyCnt));
  for j:=1 to BucketSize do
    Memo1.Lines.Add('Count of Buckets with len='+IntToStr(j)+': '+IntToStr(LenStat[j]));
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  ht.Free;
end;

procedure TForm1.Button1Click(Sender: TObject);
var Data: TObject;
begin
  if ht.Find(Edit1.Text,Data) then
    Memo1.Lines.Add('String "'+Edit1.Text+'" found. Line No. '+IntToStr(integer(Data)))
  else
    Memo1.Lines.Add('String "'+Edit1.Text+'" not found.')
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -