Kai Shi

28 papers B 4C 2Journal 9Unranked 13
YearRankTypeTitle / Venue / Authors
2026 J jnl
Ad Hoc Networks
Zongpu Wei, Jinsong Wang, Zening Zhao, Zhao Zhao, Kai Shi
2025 J jnl
J. Supercomput.
Kai Shi, Penghao Ding, Jinsong Wang
2025 J jnl
Future Gener. Comput. Syst.
Zongpu Wei, Jinsong Wang, Zening Zhao, Kai Shi
2024 J jnl
Trans. Emerg. Telecommun. Technol.
Yudai Xue, Jinsong Wang, Kai Shi, Hongwei Zhang
2023 conf
AISNS
Boyu Xiao, Shujun Chen, Jiahao Wen, Xudong Liu, Yuchen Wang, Kai Shi, Shuangxi Li
2023 conf
ICBASE
Mengshu Wang, Kai Shi, Anxing Jiang, Zeri Zhang
2023 B conf
ICPADS
Chenhao Zhang, Jiameng Cheng, Hongwei Zhang, Jinsong Wang, Kai Shi
2023 conf
ICBASE
Hao Li, Kai Shi
2023 conf
ICBASE
Zeri Zhang, Kai Shi, Mengshu Wang, Anxing Jiang
2023 conf
ICBASE
Anxing Jiang, Kai Shi, Mengshu Wang, Zeri Zhang
2023 conf
ICA3PP (4)
Shengqiang Zeng, Hongwei Zhang, Jinsong Wang, Kai Shi
2022 J jnl
IEEE Trans. Netw. Serv. Manag.
Zening Zhao, Jinsong Wang, Kai Shi, Hongwei Zhang
2021 conf
EITCE
Yishun Wei, Kai Shi, Jinchi Li
2021 conf
EITCE
Ziyi Zhao, Kai Shi
2018 conf
COMPSAC (1)
Chunyan Hou, Jinsong Wang, Chen Chen, Kai Shi
2018 J jnl
J. Intell. Fuzzy Syst.
Qingfeng Song, Kai Shi, Sheng Lin, Guangping Xu, Oliver Yang, Jinsong Wang
2018 conf
HPCC/SmartCity/DSS
Guangping Xu, Yi Zhang, Sheng Lin, Kai Shi, Quan Yu, Chi Wan Sung
2016 conf
ICC
Guangping Xu, Qunfang Mao, Sheng Lin, Kai Shi, Hua Zhang
2016 B conf
COMPSAC
Chunyan Hou, Chen Chen, Jinsong Wang, Kai Shi
2015 J jnl
IEICE Trans. Inf. Syst.
Chunyan Hou, Chen Chen, Jinsong Wang, Kai Shi
2015 J jnl
Int. J. Grid High Perform. Comput.
Menglong Li, Kai Shi, Sheng Lin, Jinsong Wang, Chunyan Hou, Peng Zhang
2014 J jnl
J. Intell. Fuzzy Syst.
Qingfeng Song, Kai Shi
2013 C conf
IPCCC
Guangping Xu, Sheng Lin, Hua Zhang, Xing Guo, Kai Shi
2013 B conf
ISIT
Sheng Lin, Kai Shi, Douglas S. Stones, Guangping Xu, Jinsong Wang
2012 C conf
IPCCC
Guangping Xu, Sheng Lin, Gang Wang, Xiaoguang Liu, Kai Shi, Hua Zhang
2009 B conf
MASS
Kai Shi, Yantai Shu, Oliver W. W. Yang, Chunfeng Liu
2009 conf
FSKD (3)
Kai Shi, Yantai Shu, Qingfeng Song
2008 conf
SpringSim
Kai Shi, Yantai Shu, Xin Wang, Oliver W. W. Yang
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