Kaiye Gao

19 papers Journal 17Unranked 2
YearRankTypeTitle / Venue / Authors
2026 J jnl
Int. J. Gen. Syst.
Xinlu Li, Dengyi Ji, Diyi Gao, Chunhua Jin, Wenting Li, Xinluan Tian, Sheng Sun, Kaiye Gao
2025 J jnl
IEEE Access
Qiming Liu, Ruirong Yang, Qin Gao, Tengxiao Liang, Xiuyuan Wang, Shiju Li, Bingyin Lei, Kaiye Gao
2025 J jnl
Comput. Ind. Eng.
Heping Jia, He Lu, Rui Peng, Kaiye Gao
2024 J jnl
Axioms
Tiantian Niu, Bingyin Lei, Li Guo, Shu Fang, Qihang Li, Bingrui Gao, Li Yang, Kaiye Gao
2024 J jnl
Qual. Reliab. Eng. Int.
Jiantai Wang, Xiaobing Ma, Kaiye Gao, Yu Zhao, Li Yang
2024 J jnl
Reliab. Eng. Syst. Saf.
Ying Zhang, Kaiye Gao, Tianyi Ma, Huan Wang, Yan-Fu Li
2023 J jnl
Axioms
Lijun Shang, Baoliang Liu, Li Yang, Kaiye Gao
2023 J jnl
Reliab. Eng. Syst. Saf.
Jiantai Wang, Tan Longyan, Xiaobing Ma, Kaiye Gao, Heping Jia, Li Yang
2022 conf
ITQM
Yujia Yang, Wentao Liu, Kaiye Gao, Zixuan Wu, Rui Peng, Anqi Zhu
2022 J jnl
J. Ind. Inf. Integr.
Kaiye Gao, Rui Peng, Li Qu, Liudong Xing, Shouyang Wang, Di Wu
2022 J jnl
IEEE Access
Guoqing Bai, Yuanying Chi, Kaiye Gao, Rui Peng
2021 J jnl
IEEE Trans. Syst. Man Cybern. Syst.
Kaiye Gao, Xiangbin Yan, Rui Peng, Liudong Xing
2021 J jnl
IEEE Access
Shuxuan Huang, Bingyin Lei, Kaiye Gao, Zixuan Wu, Ziwen Wang
2021 J jnl
IEEE Access
Kaiye Gao
2021 J jnl
IEEE Access
Kaiye Gao, Xiangbin Yan
2020 J jnl
Reliab. Eng. Syst. Saf.
Kaiye Gao, Rui Peng, Li Qu, Shaomin Wu
2019 J jnl
Reliab. Eng. Syst. Saf.
Kaiye Gao, Xiangbin Yan, Xiang-dong Liu, Rui Peng
2019 J jnl
Reliab. Eng. Syst. Saf.
Rui Peng, Di Wu, Hui Xiao, Liudong Xing, Kaiye Gao
2014 conf
ICSH
Wenbin Wang, Kaiye Gao, Qing Wei
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