Kamel Zidi

27 papers B 2C 6Misc 3Journal 7Unranked 8
YearRankTypeTitle / Venue / Authors
2025 J jnl
Symmetry
Maroua Said, Okba Taouali, Kamel Zidi, Wad Ghaban
2025 J jnl
Comput. Mater. Continua
Khaoula Ben Abdellafou, Kamel Zidi, Ahamed Aljuhani, Okba Taouali, Mohamed Faouzi Harkat
2024 J jnl
Eng. Appl. Artif. Intell.
Kamel Zidi, Khaoula Ben Abdellafou, Ahamed Aljuhani, Okba Taouali, Mohamed Faouzi Harkat
2023 J jnl
Comput. Syst. Sci. Eng.
Okba Taouali, Sawcen Bacha, Khaoula Ben Abdellafou, Ahamed Aljuhani, Kamel Zidi, Rehab Alanazi, Mohamed Faouzi Harkat
2018 C conf
HIS
Marwa Amara, Kamel Zidi, Khaled Ghédira
2017 conf
ICINCO (1)
Jihen Fourati, Brahim Issaoui, Kamel Zidi
2016 Misc conf
ICCS
Amine Dhahri, Anis Mjirda, Kamel Zidi, Khaled Ghédira
2016 B conf
ACIVS
Marwa Amara, Kamel Zidi, Khaled Ghédira
2015 J jnl
Electron. Notes Discret. Math.
Amine Dhahri, Kamel Zidi, Khaled Ghédira
2015 C conf
AICCSA
Marwa Amara, Khaled Ghédira, Kamel Zidi, Salah Zidi
2015 C conf
HIS
Marwa Amara, Kamel Zidi, Khaled Ghédira, Salah Zidi
2015 conf
ICINCO (1)
Ibtissem Bouoni, Nadia Smairi, Kamel Zidi
2014 conf
ICINCO (1)
Houda Abadlia, Nadia Smairi, Kamel Zidi
2014 conf
AMLTA
Marwa Amara, Kamel Zidi, Salah Zidi, Khaled Ghédira
2014 conf
AMLTA
Marwa Amara, Kamel Zidi
2014 Misc conf
DCAI
Fethi Mguis, Kamel Zidi, Khaled Ghédira, Pierre Borne
2014 conf
ICINCO (1)
Ahlem Amor, Nadia Smairi, Kamel Zidi
2014 Misc conf
ICCS
Amine Dhahri, Kamel Zidi, Khaled Ghédira
2013 B conf
SMC
Radhia Zaghdoud, Simon Collart Dutilleul, Khaled Ghédira, Khaled Mesghouni, Kamel Zidi
2013 C conf
HIS
Brahim Issaoui, Lazhar Khelifi, Issam Zidi, Kamel Zidi, Khaled Ghédira
2013 C conf
HIS
Sami Mnasri, Kamel Zidi, Khaled Ghédira
2013 C conf
HIS
Sami Mnasri, Fatma Abbes, Kamel Zidi, Khaled Ghédira
2013 J jnl
Int. J. Comput. Commun. Control
Kamel Zidi, Fethi Mguis, Pierre Borne, Khaled Ghédira
2012 J jnl
Eng. Appl. Artif. Intell.
Issam Zidi, Khaled Mesghouni, Kamel Zidi, Khaled Ghédira
2010 conf
IFAC HMS
Issam Zidi, Khaled Mesghouni, Kamel Zidi, Khaled Ghédira
2006
Kamel Zidi
2004 conf
SMC (7)
Kamel Zidi, Slim Hammadi
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