Makoto Aoki

12 papers B 1C 3Journal 5Unranked 3
YearRankTypeTitle / Venue / Authors
2025 J jnl
IEEE Trans. Geosci. Remote. Sens.
Shaik Allabakash, Hajime Okamoto, Kaori Sato, Hiroaki Horie, Makoto Aoki, Shunsuke Aoki
2024 C conf
IGARSS
Eiichi Yoshikawa, V. Chandrasekar, Makoto Aoki, Hironori Iwai, Tomoo Ushio, Shoken Ishii
2019 C conf
IGARSS
Shoken Ishii, Atsushi Sato, Makoto Aoki, Koichi Akahane, Atsushi Matsumoto, Shigeo Nagano, Katsuhiro Nakagawa
2015 conf
ISMICT
Shingo Tomura, Tomohiro Harada, Hiroyuki Sato, Keiki Takadama, Makoto Aoki
2013 conf
SII
Makoto Aoki, Ken'ichi Koyanagi, Tatsuo Motoyoshi, Toru Oshima
2012 conf
SIGGRAPH Emerging Technologies
Tetsuaki Baba, Yuya Kikukawa, Toshiki Yoshiike, Tatsuhiko Suzuki, Rika Shoji, Kumiko Kushiyama, Makoto Aoki
2012 J jnl
IEICE Electron. Express
Makoto Aoki, Saroj R. Tripathi, Masanori Takeda, Norihisa Hiromoto
2011 J jnl
IEICE Trans. Commun.
Makoto Aoki, Eiji Oki
2010 B conf
GLOBECOM
Makoto Aoki, Eiji Oki
2010 C conf
HPSR
Makoto Aoki, Eiji Oki, Roberto Rojas-Cessa
2009 J jnl
IEICE Electron. Express
Saroj R. Tripathi, Makoto Aoki, Kento Mochizuki, Toshiaki Asahi, Iwao Hosako, Norihisa Hiromoto
1987 J jnl
IEEE J. Sel. Areas Commun.
Hiroyuki Ichikawa, Makoto Aoki, Tohru Uchiyama
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