Kai Richter

36 papers A* 3A 7C 2Journal 6Unranked 16
YearRankTypeTitle / Venue / Authors
2012 C conf
IECON
Jonas Diemer, Jonas Rox, Rolf Ernst, Feng Chen, Karl-Theo Kremer, Kai Richter
2009 A conf
DATE
Kai Richter, Marek Jersak, Rolf Ernst
2009 J jnl
IEEE Trans. Comput. Aided Des. Integr. Circuits Syst.
Simon Schliecker, Jonas Rox, Mircea Negrean, Kai Richter, Marek Jersak, Rolf Ernst
2008 C conf
ISoLA
Daniel Kästner, Reinhard Wilhelm, Reinhold Heckmann, Marc Schlickling, Markus Pister, Marek Jersak, Kai Richter, Christian Ferdinand
2007 A* conf
DAC
Razvan Racu, Arne Hamann, Rolf Ernst, Kai Richter
2006 J jnl
Real Time Syst.
Arne Hamann, Marek Jersak, Kai Richter, Rolf Ernst
2006 conf
DATE Designers' Forum
Kai Richter, Rolf Ernst
2005
Kai Richter
2005 conf
MBEES
Kai Richter, Marek Jersak, Rolf Ernst
2005 J jnl
Int. J. Embed. Syst.
Marek Jersak, Kai Richter, Rolf Ernst
2005 conf
GI Jahrestagung (2)
Christian Haubelt, Marek Jersak, Kai Richter, Karsten Strehl, Dirk Ziegenbein, Rolf Ernst, Jürgen Teich, Lothar Thiele
2004 conf
MBMV
Razvan Racu, Kai Richter, Rolf Ernst
2004 A conf
RTSS
Arne Hamann, Marek Jersak, Kai Richter, Rolf Ernst
2004 J jnl
Math. Comput. Simul.
Marek Jersak, Kai Richter, Rolf Ernst
2003 J jnl
Computer
Kai Richter, Marek Jersak, Rolf Ernst
2003 conf
MBMV
Marek Jersak, Kai Richter, Rolf Ernst, Jörn-Christian Braam, Zheng-Yu Jiang, Fabian Wolf
2003 ch.
Embedded Software for SoC
Marek Jersak, Kai Richter, Razvan Racu, Jan Staschulat, Rolf Ernst, Jörn-Christian Braam, Fabian Wolf
2003 A conf
DATE
Marek Jersak, Kai Richter, Rolf Ernst, Jörn-Christian Braam, Zheng-Yu Jiang, Fabian Wolf
2003 A conf
RTSS
Kai Richter, Razvan Racu, Rolf Ernst
2002 conf
DIPES
Kai Richter, Dirk Ziegenbein, Marek Jersak, Rolf Ernst
2002 A conf
DATE
Kai Richter, Rolf Ernst
2002 conf
Embedded Processor Design Challenges
Christian Haubelt, Jürgen Teich, Kai Richter, Rolf Ernst
2002 conf
MBMV
Kai Richter, Rolf Ernst, Wayne H. Wolf
2002 A* conf
DAC
Kai Richter, Dirk Ziegenbein, Marek Jersak, Rolf Ernst
2002 conf
MBMV
Christian Haubelt, Jürgen Teich, Kai Richter, Rolf Ernst
2002 conf
Modelle, Werkzeuge und Infrastrukturen zur Unterstützung von Entwicklungsprozessen
Marek Jersak, Kai Richter, Dirk Ziegenbein, Rolf Ernst, Christian Haubelt, Frank Slomka, Jürgen Teich
2002 J jnl
IEEE Trans. Very Large Scale Integr. Syst.
Dirk Ziegenbein, Kai Richter, Rolf Ernst, Lothar Thiele, Jürgen Teich
2002 A conf
DATE
Christian Haubelt, Jürgen Teich, Kai Richter, Rolf Ernst
2002 conf
CODES
Marek Jersak, Kai Richter, Rafik Henia, Rolf Ernst, Frank Slomka
2001 conf
HLDVT
Marek Jersak, Kai Richter, Rolf Ernst
2001 conf
LCTES/OM
Dirk Ziegenbein, Fabian Wolf, Kai Richter, Marek Jersak, Rolf Ernst
2001 conf
OM@PLDI
Dirk Ziegenbein, Fabian Wolf, Kai Richter, Marek Jersak, Rolf Ernst
1999 A* conf
DAC
Kai Richter, Dirk Ziegenbein, Rolf Ernst, Lothar Thiele, Jürgen Teich
1999 conf
MBMV
Dirk Ziegenbein, Kai Richter, Rolf Ernst, Lothar Thiele, Jürgen Teich
1998 conf
CODES
Dirk Ziegenbein, Rolf Ernst, Kai Richter, Jürgen Teich, Lothar Thiele
1998 A conf
ICCAD
Dirk Ziegenbein, Kai Richter, Rolf Ernst, Jürgen Teich, Lothar Thiele
redb/extractors/decompiler/bninja/similarity/minhashcustom.py
← Index redb/extractors/decompiler/bninja/similarity/minhashcustom.py python
import numpy as np
import mmh3

class MinHashCustom:
    """
    DTO for an actual MinHash
    <minhash>: a binary sequence of packed int8/32 values
    <minhash_int>: the equivalent representation of <minhash> but as list of int8/32
    """

    _HASH_MAX = 0xFFFFFFFF
    _MINHASH_BITS = 32

    def getSignatureEntrySize(self):
        return 1 if self.MINHASH_BITS <= 8 else 4

    def __init__(self, function_addr=None, minhash_bytes=None, minhash_signature=None, minhash_bits=32):
        self.minhash = b""
        self.minhash_int = []
        if minhash_bits:
            self._MINHASH_BITS = minhash_bits
        if minhash_bytes and minhash_signature:
            raise ValueError("Can use only one keyword argument")
        if minhash_bytes:
            if self._MINHASH_BITS <= 8:
                minhash_signature = np.frombuffer(minhash_bytes, dtype=np.uint8)
            else:
                minhash_signature = np.frombuffer(minhash_bytes, dtype=np.uint32)
            self.setMinHash(minhash_signature)
        elif minhash_signature:
            self.setMinHash(minhash_signature)

        self.shingler_composition = {}
        self.function_addr = function_addr

    def hasMinHash(self):
        return len(self.minhash) > 0

    def getMinHash(self):
        return self.minhash

    def getMinHashInt(self):
        return self.minhash_int

    def setMinHash(self, minhash_signature):
        self.minhash_int = [i % 2 ** self._MINHASH_BITS for i in minhash_signature]
        if self._MINHASH_BITS <= 8:
            self.minhash = np.array(self.minhash_int, dtype=np.uint8).tobytes()
        else:
            self.minhash = np.array(self.minhash_int, dtype=np.uint32).tobytes()

    def getComposition(self):
        return self.shingler_composition

    def scoreAgainst(self, other):
        return self.calculateMinHashScore(self.minhash, other.minhash, minhash_bits=self._MINHASH_BITS)

    @staticmethod
    def getHashMax():
        return MinHashCustom._HASH_MAX

    @staticmethod
    def hashData(data, seed) -> int:
        if isinstance(data, (str, bytes, bytearray)):
            return mmh3.hash(data, seed) & MinHashCustom._HASH_MAX
        elif isinstance(data, (list, tuple)):
            to_hash = "|".join(str(elem) for elem in data)
            return mmh3.hash(to_hash, seed) & MinHashCustom._HASH_MAX
        else:
            raise NotImplementedError(
                f"Type not supported for hashData: {type(data).__name__}"
            )

    @staticmethod
    def calculateMinHashScore(first, second, minhash_bits=32):
        if minhash_bits <= 8:
            first_np = np.frombuffer(first, dtype=np.uint8)
            second_np = np.frombuffer(second, dtype=np.uint8)
        else:
            first_np = np.frombuffer(first, dtype=np.uint32)
            second_np = np.frombuffer(second, dtype=np.uint32)
        return 100.0 * sum(first_np == second_np) / len(first_np)

    @staticmethod
    def calculateMinHashIntScore(first, second):
        score = 0
        num_hashes = len(first)
        if num_hashes:
            for index, part in enumerate(first):
                score += 1 if part == second[index] else 0
            return 100.0 * score / num_hashes
        return 0.0

    @property
    def MINHASH_BITS(self):
        return self._MINHASH_BITS