Xiang Zhan

19 papers A* 1C 1Journal 16Unranked 1
YearRankTypeTitle / Venue / Authors
2025 J jnl
Bioinform.
Nicholas Rios, Yuke Shi, Jun Chen, Xiang Zhan, Lingzhou Xue, Qizhai Li
2025 J jnl
Bioinform.
Yicong Mao, Zhiwen Jiang, Tianying Wang, Yijuan Hu, Xiang Zhan
2024 J jnl
Stat. Anal. Data Min.
Runze Li, Jin Mu, Songshan Yang, Cong Ye, Xiang Zhan
2024 J jnl
Quantum Inf. Process.
Xiaowei Wang, Gaoyan Zhu, Lei Xiao, Xiang Zhan, Peng Xue
2023 J jnl
Comput. Stat. Data Anal.
Arun Srinivasan, Lingzhou Xue, Xiang Zhan
2023 C conf
iSPEC
Kunxi Hu, Feixiong Chen, Zhenguo Shao, Hongbin Wu, Jiaxin Ding, Xiang Zhan
2023 J jnl
J. Comput. Graph. Stat.
Changcheng Li, Runze Li, Jiawei Wen, Songshan Yang, Xiang Zhan
2022 J jnl
Comput. Stat. Data Anal.
Youngjoo Cho, Xiang Zhan, Debashis Ghosh
2022 J jnl
Bioinform.
Tianying Wang, Wodan Ling, Anna M. Plantinga, Michael C. Wu, Xiang Zhan
2021 J jnl
Bioinform.
Nehemiah Wilson, Ni Zhao, Xiang Zhan, Hyunwook Koh, Weijia Fu, Jun Chen, Hongzhe Li, Michael C. Wu, Anna M. Plantinga
2021 J jnl
Sci. Program.
Jinhai Li, Yunlei Ma, Xiang Zhan, Jiaming Pei
2020 J jnl
Sensors
Zhiguo Wang, Yi Zhang, Xiang Zhan, Qiyuan Jiang, Hui Luo
2020 J jnl
Bioinform.
Songshan Yang, Jiawei Wen, Scott T. Eckert, Yaqun Wang, Dajiang J. Liu, Rongling Wu, Runze Li, Xiang Zhan
2020 conf
ICMIP
Xing Zhao, Ting Zhang, Xiang Zhan, Wenxin Chen
2019 A* conf
KDD
Songshan Yang, Jiawei Wen, Xiang Zhan, Daniel Kifer
2018 J jnl
CoRR
Songshan Yang, Jiawei Wen, Xiang Zhan, Daniel Kifer
2016 J jnl
Bioinform.
Xiang Zhan, Santhosh Girirajan, Ni Zhao, Michael C. Wu, Debashis Ghosh
2015 J jnl
BMC Bioinform.
Xiang Zhan, Andrew D. Patterson, Debashis Ghosh
2015 J jnl
计算机科学
Ping Guo, Desheng Fu, Yaping Cheng, Xiang Zhan
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