Kang Xu

22 papers A* 2A 1Journal 12Unranked 7
YearRankTypeTitle / Venue / Authors
2025 J jnl
Inf. Process. Manag.
Kang Xu, Miqi Chen, Yifan Feng, Zhenjiang Dong
2025 conf
BIBM
Kang Xu, Peihan Cai, Liqun Lu, Zitian Wang, Lingli Jiao, Ming Li, Danhua Ma, Jianxiang Wei, Zhenjiang Dong
2025 J jnl
IEEE Internet Things J.
Sanli Zhu, Yuan Li, Kang Xu, Junjun Xu
2025 conf
BIBM
Kang Xu, Peihan Cai, Liqun Lu, Zhenjiang Dong
2025 J jnl
J. Big Data
Kang Xu, Yifan Feng, Qiandi Li, Zhenjiang Dong, Jianxiang Wei
2024 J jnl
CoRR
Tongtong Wu, Weigang Wu, Xingyu Wang, Kang Xu, Suyu Ma, Bo Jiang, Ping Yang, Zhenchang Xing, Yuan-Fang Li, Gholamreza Haffari
2023 J jnl
J. Inf. Sci.
Ibrahim Hussein Musa, Ibrahim Zamit, Kang Xu, Khaoula Boutouhami, Guilin Qi
2023 J jnl
Sensors
Kang Xu, Yuan Li, Yixuan Li, Liyan Xu, Ruiyao Li, Zhenjiang Dong
2022 J jnl
Big Data Res.
Kang Xu, Xiaoqiu Lu, Yuan-Fang Li, Tongtong Wu, Guilin Qi, Ning Ye, Dong Wang, Zheng Zhou
2022 J jnl
CoRR
Kang Xu, Xiaoqiu Lu, Yuan-Fang Li, Tongtong Wu, Guilin Qi, Ning Ye, Dong Wang, Zheng Zhou
2020 J jnl
Intell. Data Anal.
Ibrahim Hussein Musa, Kang Xu, Feng Liu, Ibrahim Zamit, Waheed Ahmed Abro, Guilin Qi
2020 J jnl
CoRR
Junheng Huang, Lu Pan, Kang Xu, Weihua Peng, Fayuan Li
2018 J jnl
Knowl. Based Syst.
Kang Xu, Guilin Qi, Junheng Huang, Tianxing Wu, Xuefeng Fu
2018 A* conf
IJCAI
Huapeng Xu, Guilin Qi, Jingjing Li, Meng Wang, Kang Xu, Huan Gao
2017 conf
CCL
Kang Xu, Feng Liu, Tianxing Wu, Sheng Bi, Guilin Qi
2017 conf
JIST
Kang Xu, Junheng Huang, Guilin Qi
2017 conf
CCKS
Kang Xu, Junheng Huang, Tianxing Wu
2017 conf
ISWC (1)
Tianxing Wu, Lei Zhang, Guilin Qi, Xuan Cui, Kang Xu
2017 J jnl
Intell. Data Anal.
Kang Xu, Guilin Qi, Junheng Huang, Tianxing Wu
2017 conf
JIST
Kang Xu, Sheng Bi, Guilin Qi
2016 A conf
ECAI
Kang Xu, Guilin Qi, Junheng Huang, Tianxing Wu
2016 A* conf
AAAI
Tianxing Wu, Guilin Qi, Haofen Wang, Kang Xu, Xuan Cui
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