Mangui Liang

29 papers Journal 19Unranked 10
YearRankTypeTitle / Venue / Authors
2024 J jnl
CoRR
Xiaohui Zhang, Wenjie Fu, Mangui Liang
2024 J jnl
CoRR
Xiaohui Zhang, Wenjie Fu, Mangui Liang
2023 J jnl
Sensors
Xiance Meng, Mangui Liang
2023 conf
CICAI (2)
Xiaohui Zhang, Mangui Liang, Zhengkun Tian, Jiangyan Yi, Jianhua Tao
2023 J jnl
CoRR
Xiaohui Zhang, Mangui Liang, Zhengkun Tian, Jiangyan Yi, Jianhua Tao
2022 conf
ICCCS
Ruijun Li, Mangui Liang
2022 J jnl
IEEE Trans. Serv. Comput.
Aqun Zhao, Zhiyu Liu, Jianping Pan, Mangui Liang
2022 J jnl
Entropy
Xiance Meng, Mangui Liang
2021 J jnl
IEEE Access
Ziwen Zhang, Mangui Liang, Zhe Wang
2021 conf
CONF-CDS
Dong Feng, Mangui Liang, Guangchao Wang
2021 J jnl
J. Cloud Comput.
Zhiyu Liu, Aqun Zhao, Mangui Liang
2021 conf
CONF-CDS
Zhiyu Liu, Mangui Liang, Jin Guo, Guangchao Wang
2020 J jnl
IEEE Access
Zizhen Deng, Zhen Cai, Mangui Liang
2019 J jnl
EURASIP J. Wirel. Commun. Netw.
Zhen Cai, Mangui Liang, Qiushi Sun
2017 conf
INFOCOM Workshops
Aqun Zhao, Zhiyu Liu, Jianping Pan, Mangui Liang
2017 conf
SpaCCS Workshops
Jie Yu, Mangui Liang
2014 J jnl
IEICE Trans. Fundam. Electron. Commun. Comput. Sci.
He Liu, Mangui Liang, Haoliang Sun
2014 J jnl
Int. J. Commun. Syst.
He Liu, Mangui Liang
2013 J jnl
Secur. Commun. Networks
Wenjuan An, Mangui Liang
2013 J jnl
Secur. Commun. Networks
He Liu, Mangui Liang
2013 J jnl
Neurocomputing
Wenjuan An, Mangui Liang
2013 J jnl
IEEE Commun. Lett.
Shujuan Wang, Chen Gong, Xiaodong Wang, Mangui Liang
2012 J jnl
Int. J. Comput. Intell. Syst.
Jinxin Zhang, Mangui Liang, Shujuan Wang
2012 J jnl
IEEE Wirel. Commun. Lett.
Shujuan Wang, Chen Gong, Xiaodong Wang, Mangui Liang
2012 J jnl
J. Networks
Jinxin Zhang, Mangui Liang, Zhaowei Wang
2008 conf
ICAIT
Jinxin Zhang, Mangui Liang
2006 conf
ICICIC (2)
Mangui Liang, Qi Hu, Shouzeng Huang
2006 conf
ICICIC (1)
Mangui Liang, Qi Hu, Jie Peng, Guoqiao Yu
2000 conf
ICECS
Yang Xiao, Mangui Liang
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