Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/GAP/pkg/mapclass/lib/   (GAP Algebra Version 4.15.1©)  Datei vom 17.8.2022 mit Größe 4 kB image not shown  

Quelle  table.gi   Sprache: Shell

 

# This module is part of a GAP package MAPCLASS. 
# It contains functions maintaining a hash table 
# containing a braid orbit.
#
# A. James,  K. Magaard, S. Shpectorov 2011


# Function initializing tables 

#
# InitializeTable
# Takes hashlength, numberofgenerators and number of points acted on
# Returns a record with three places, (table, hash, primecode)
#
InstallGlobalFunction(InitializeTable,function(HashLength,NumberOfGenerators,OurN)
  local table,hash,primecode;

  table:=[];
  hash:=List([1..HashLength],x->0);
  primecode:=List([1..NumberOfGenerators*OurN],x->RandomList(Primes));

  return rec(table:=table, hash:=hash, primecode:= primecode);
end);

#
# HashKey
# Function computing the hash key of a tuple
#
InstallGlobalFunction(HashKey,function(T,PrimeCode,HashLength,OurN)
  local t;
  t:=Concatenation(List(T,x->OnTuples([1..OurN],x)));
  return 1+(Sum(List([1..Length(t)],x->t[x]*PrimeCode[x])) mod HashLength);
end);

#
# LookUpTuple
# Function looking up a tuple returns index if found else returns fail
#
InstallGlobalFunction(LookUpTuple,function(T, PrimeCode, HashLength, TupleTable,
  Hash, OurN)
  local h,a;
  h:=HashKey(T,PrimeCode,HashLength, OurN);
  a:=Hash[h];
  while a<>0 do
    if TupleTable[a].tuple=T then
      return a;
    else
      a:=TupleTable[a].next;
    fi;
  od;
  return fail;
end);

#
# AddTuple
# Adds a tuple to the end of a tuple table adjusts the HashKey and returns a
# the length of the last element of the tuple and the adjusted Hashkey
#
InstallGlobalFunction(AddTuple,function(T,PrimeCode, HashLength, TupleTable, Hash, OurN)
  local i,j,k,h;
  h:=HashKey(T,PrimeCode,HashLength,OurN);
  Append(TupleTable,[rec(tuple:=T,next:=Hash[h])]);
  Hash[h]:=Length(TupleTable);
  return(Length(TupleTable));
 end);

## FingerPrinting
# Fingerprinting means the addition of a new FingerPrinting Table
# The fingerprinting process is as follows:
# take a random selection of words from our free group
# compute the order of this words using mappedword
# return a key which we use to generate the hashkey from

## Returns a random free word of length
# InstallGlobalFunction(RanFreeWord, function(fgp, absgens, length)
#   local i,p,w;
#   w:=Identity(fgp);
#   p:=RandomList([0,1]);
#   w:=Product(List([1..length], x ->RandomList(absgens)^RandomList([-1,1])));
#   if w <> One(fgp) then 
#     return w;
#   else
#     return RanFreeWord(fgp, absgens, length);
#   fi;
# end);

# InstallGlobalFunction(PrepareFingerPrinting,
#     function(numtestwords,primecode,ourR, absgens, fgp)
#   local testword, fingerfun;
#   testword:= List([1..numtestwords], i -> RanFreeWord(fgp, absgens, ourR));
#   fingerfun:=function(tuple)
#     return List(testword, x -> Order(MappedWord(x, absgens, tuple)));
#   end;
#   return fingerfun;
# end);

# # HashFinger
# # Computes the hash key based of a fingerprint
# InstallGlobalFunction(HashFinger, function(fprint, numwords, primecode, hashlength)
#   local hash, ptr;
#   return 1 + Sum(List([1..numwords], x-> fprint[x]*primecode[x])) mod hashlength;
# end);

# # Creates a closure around numwords and primecode
# # returns a function f which takes a finger pring and returns a hashkey
# InstallGlobalFunction(GenFHashFunction, function(numwords, primecode, hashlength)
#   local fun, fprint;
#   fun:=function(fprint)
#     return HashFinger(fprint, numwords, primecode, hashlength);
#   end;
# end);

# ## Given a tuple and testword return a fingerprint
# InstallGlobalFunction(Getfprint, function(tuple, testword, absgens)
#   return List(testword, x -> Order(MappedWord(x, absgens, tuple)));
# end);

# ## Given a fprint returns a ptr such that ftable[ptr].fprint = fprint
# ## and ftable.
# ## hashfn is a function which given a fingerprint returns a ptr to htable such
# ## that ftable[ptr].fprint = fprint
# InstallGlobalFunction(LookUpHashFrmPrint, function(fprint, hashfn, ftable, htable)
#   local hash, ptr, a;
#   a:=hashfn(fprint);
#   ptr:=ftable[a];
#   while ptr <> 0 do 
#     if ftable[ptr].fprint = fprint then
#       return ptr;
#     else
#       ptr:= ftable[ptr].next;
#     fi;
#   od;
#   Append(ftable,[rec(fprint:=fprint, next:=htable[ptr])]);
#   htable[ptr]:=Length(ftable);
#   return htable[ptr];
# end);

# ## given a tuple returns fail or the index of the tuple
# ## uses fingerprinting
# InstallGlobalFunction(LookUpTupleF, function(tuple, testword, absgens,
#     hashlength, htable, ftable, tupletable, hashfn)
#   local hash, fprint, ptr;
#   fprint:=Getfprint(tuple, testword, absgens, hashlength);
#   hash:=LookUpHashFrmPrint(fprint, hashfn, ftable, htable);
#   ptr:=htable[hash];
#   while ptr<>0 do
#     if RepresentativeAction(tupletable[ptr].tuple,tuple) <> fail then
#       return ptr;
#     else
#       ptr:=tupletable[ptr].next;
#     fi;
#   od;
#   return fail;
# end);

# ## add tuple to tupletable with given hash
# InstallGlobalFunction(AddTupleF, function(tuple, hash, tupletable, htable)
#   local i;
#   Append(tupletable, [rec(tuple:=tuple, next:=hash)]);
#   htable[hash]:=Length(tupletable);
#   return Length(tupletable);
# end);
# Ende

Messung V0.5 in Prozent
C=31 H=86 G=64

¤ Dauer der Verarbeitung: 0.20 Sekunden  (vorverarbeitet am  2026-10-12) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover

NIST Cobol Testsuite

Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.