Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Biseh in Linear Hashing umwandeln

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
26.04.2014, 09:49 Uhr
~whasabi
Gast


Hallo
Ich muss zurzeit einen Biseh Code in C++ in Linear Hashing umwandeln...
Leider bin ich mir am Anfang da nicht so ganz sicher wie das geht..

also eigentlich brauche ich ja genau wie bei Biseh 2 Dimensionen also Eintrag eintrag [] [] (hätte ich mir gedacht)

aber weiter versteh ich jetzt nicht ganz wie das ist mit Block und Eintrag wo da jetzt der Unterschied ist und und und.. könnt ihr mir vl auf die Sprünge helfen?
die void Funktionen danach weiß ich schon was ich programmieren muss [zb die Liste als Überlaufblock (aber wie verbindet man eigentlich den Array mit einer Liste?)]

Ich fange ja mit 2^0 an und dann jedes mal wenn ein Überlaufblock wäre wird die hochzahl um 1 erhöht

ich bin sehr verwirrt da wir jetzt mit templates und unterklassen und und und arbeiten :/

könnt ihr mir vl am Anfang helfen bzw nen Tipp geben? das wäre sehr toll!

Hier mal der Anfang vom Biseh Code ohne den template void Funktionen


C++:
class BisehEmptyException : public ContainerException {
public:
   virtual const char * what() const throw() { return "Biseh: empty"; }
};

template <typename E, size_t B = 30, size_t X = 16, size_t Y = 16 >
class Biseh : public Container<E> {
   struct Block {
     size_t n;
     E values[B];
     Block(): n(0) {}
     bool member(const E& e) const { for (size_t i = 0; i < n; ++i) if (e == values[i]) return true; return false; }
     bool append(const E& e) { if (n==B) return false; values[n++] = e; return true; }
     bool del(const E&);
   };
   struct Eintrag {
     size_t z;
     Block * block;
     Eintrag(): z(0), block(0) {}
     ~Eintrag() { delete[] block; }
     bool add(const E&, unsigned long);
     bool remove(const E&, unsigned long);
     void resize();
     bool member(const E& e, unsigned long h) const { return block && block[h/X/Y%z].member(e); }
   };

   Eintrag eintrag[X][Y];
   size_t n;
   E * sortedvalues() const;
   static void sort(E *, size_t);
public:
   Biseh(): n(0) {}

   using Container<E>::add;
   virtual void add( const E e[], size_t len );

   using Container<E>::remove;
   virtual void remove( const E e[], size_t len );

   virtual bool member( const E& e ) const;
   virtual size_t size( ) const { return n; }

   virtual E min( ) const;
   virtual E max( ) const;

   virtual std::ostream& print( std::ostream& o ) const;

   virtual size_t apply( const Functor<E>& f, Order order = dontcare ) const;
};

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
26.04.2014, 22:08 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


was genau soll den Biseh sein? Ich kenn nur Bezier?

Ansonsten musst du dich doch "nur" an das "Container"-Interface halten, d.h die entsprechenden Methoden in deinem LinearHashing-Klassentemplate implementieren.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: