作者ric2k1 (Ric)
看板EE_DSnP
标题Re: [请益] 关於hash
时间Sat Jan 15 01:05:53 2011
※ 引述《nnthome (nnthome)》之铭言:
: 不好意思想请教一下大家关於hash的问题
: 在老师提供的myHash中,class Hash主要是提供一个Hash二维的架构
: 来存pair <class HashKey , class Hashdata>
: 但我不太明白class HashKey和class Hashdata是要定义些什麽,或是要包什麽东西
: 就我的理解Hashdata应该就是指AigGate,那HashKey呢?
: HashKey的member也是AigGate吗?因为要overload () ==
: 应该也要用到AigGate的资讯吧?
: 这几个class用意搞不太清楚,想请教一下,谢谢
说明一下我的 hash 的 template arguments, 不想被雷的可以按左键离开...
用在 strash 的 hash ---
Hash<StrashKey, CirGateV> FECHash;
class StrashKey
{
public:
// For the ease of comparison, I always make sure in0 < in1 here...
StrashKey(size_t in0, size_t in1) { ... }
// Must overload operator() in order to return the Hash Key
size_t operator() () const { // return a size_t based on _in0 and _in1; }
// Must overload operator == to compare the equivalence of Hash Key
bool operator == (const StrashKey& k) const {
return (_in0 == k._in0) && (_in1 == k._in1); }
private:
size_t _in0; // CirGateV::_gateV for first fanin (see below)
size_t _in1; // CirGateV::_gateV for second fanin
};
class CirGateV
{
public:
// define some utilities functions for the ease of use
private:
size_t _gateV; // Gate pointer value + isInv()
};
template <class HashKey, class HashData>
class Hash
{
typedef pair<HashKey, HashData> HashNode;
public:
...
// check if k is in the hash...
// if yes, update n and return true;
// else return false;
bool check(const HashKey& k, HashData& n) const {
size_t b = bucketNum(k);
for (size_t i = 0, bn = _buckets[b].size(); i < bn; ++i)
if (_buckets[b][i].first == k) {
....
}
...
}
private:
// Do not add any extra data member
size_t _numBuckets;
vector<HashNode>* _buckets;
size_t bucketNum(const HashKey& k) const {
return (k() % _numBuckets); } // 大放送啦!!
};
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.36.54.188
※ 编辑: ric2k1 来自: 114.36.54.188 (01/15 01:06)
1F:推 michael0728n:阿~~~还是忍不住被雷了XD 01/15 01:08
2F:→ michael0728n:是说攻略还会出吗(歪头 感觉现在出有点救不了人XDDDD 01/15 01:09
3F:→ ric2k1:啊,的确,我也不知道该写甚麽攻略... circuit parsing 01/15 01:49
4F:→ ric2k1:感觉就是硬做... strash 的重点是要为用 hash 以及 circuit 01/15 01:50
5F:→ ric2k1:simplification... 至於 simulation or fraig, 我怕写太多 01/15 01:50
6F:→ ric2k1:会影响到普罗大众的心情... 大家有问题尽量问吧! 01/15 01:51
7F:→ ric2k1: 会用 hash 01/15 01:52
8F:推 nnthome:CirGateV就是HashData? 01/15 08:17
9F:→ ric2k1:是啊! 请记得 HashKey, HashData 是 template arguments, 01/15 10:21
10F:→ ric2k1:在使用时可以是任何的 class name. 01/15 10:22
11F:→ ric2k1:它的意义是用 HashKey 来索引之後得到的 data 01/15 10:25