H. James Hoover

37 papers A* 2A 4B 3C 3Journal 14Unranked 10
YearRankTypeTitle / Venue / Authors
2012 J jnl
Comput. Educ.
Camilo Arango Moreno, Walter F. Bischof, H. James Hoover
2011 conf
ICSM
Michael Smit, Barry Gergel, H. James Hoover, Eleni Stroulia
2010 C conf
ICFEM
Xin Li, H. James Hoover, Piotr Rudnicki
2009 B conf
GPCE
S. Hossein Sadat-Mohtasham, H. James Hoover
2008 C conf
APSEC
Daqing Hou, Chandan Raj Rupakheti, H. James Hoover
2008 J jnl
Presence Teleoperators Virtual Environ.
Pablo A. Figueroa, Walter F. Bischof, Pierre Boulanger, H. James Hoover, Robyn Taylor
2008 A conf
SIGCSE
Nathan R. Sturtevant, H. James Hoover, Jonathan Schaeffer, Sean Gouglas, Michael H. Bowling, Finnegan Southey, Matthew Bouchard, Ghassan Zabaneh
2007 A conf
ICPC
Giuseppe A. Di Lucca, Michael Smit, Bruce Fraser, Eleni Stroulia, H. James Hoover
2006 A conf
ICPC
Daniel L. Moise, Kenny Wong, H. James Hoover, Daqing Hou
2006 conf
ICSM
Daqing Hou, H. James Hoover
2006 B conf
FM
Xin Li, H. James Hoover, Piotr Rudnicki
2006 J jnl
IEEE Trans. Software Eng.
Daqing Hou, H. James Hoover
2005 J jnl
Int. J. Hum. Comput. Stud.
Pablo A. Figueroa, Walter F. Bischof, Pierre Boulanger, H. James Hoover
2005 conf
IWPC
Daqing Hou, Kenny Wong, H. James Hoover
2004 conf
CASCON
Daqing Hou, H. James Hoover, Piotr Rudnicki
2004 C conf
SCAM
Daqing Hou, H. James Hoover, Piotr Rudnicki
2002 conf
Web3D
Pablo A. Figueroa, Mark Green, H. James Hoover
2002 A conf
CAiSE
Daqing Hou, H. James Hoover, Eleni Stroulia
2002 J jnl
Inf. Syst. Frontiers
Daqing Hou, H. James Hoover
2001 conf
Eurographics (Short Presentations)
Pablo A. Figueroa, Mark Green, H. James Hoover
2001 conf
CASCON
Daqing Hou, H. James Hoover
2000 J jnl
ACM Comput. Surv.
Garry Froehlich, H. James Hoover, Paul G. Sorenson
2000 B conf
SPLC
H. James Hoover, Tony Olekshy, Garry Froehlich, Paul G. Sorenson
1999 conf
HICSS
Garry Froehlich, H. James Hoover, Wendy Liew, Paul G. Sorenson
1999 J jnl
Inf. Syst.
Garry Froehlich, H. James Hoover, Wendy Liew, Paul G. Sorenson
1999 J jnl
Australas. J. Inf. Syst.
Garry Froehlich, H. James Hoover, Paul G. Sorenson
1997 conf
FIW
Stephen Rochefort, H. James Hoover
1997 A* conf
ICSE
Garry Froehlich, H. James Hoover, Ling Liu, Paul G. Sorenson
1996 J jnl
Chic. J. Theor. Comput. Sci.
H. James Hoover, Piotr Rudnicki
1991 J jnl
Inf. Comput.
H. James Hoover
1990 J jnl
SIAM J. Comput.
H. James Hoover
1989 conf
Computers and Mathematics
H. James Hoover
1987
H. James Hoover
1986 J jnl
SIAM J. Comput.
Paul Beame, Stephen A. Cook, H. James Hoover
1985 J jnl
SIAM J. Comput.
Stephen A. Cook, H. James Hoover
1984 J jnl
J. ACM
H. James Hoover, Maria M. Klawe, Nicholas Pippenger
1984 A* conf
FOCS
Paul Beame, Stephen A. Cook, H. James Hoover
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