Illya Bakurov

29 papers A 3B 7C 2Journal 12Unranked 4
YearRankTypeTitle / Venue / Authors
2026 J jnl
CoRR
Ruchika Gupta, Illya Bakurov, Nathan Haut, Wolfgang Banzhaf
2025 A conf
GECCO
Illya Bakurov, Aidan Murphy, Charles Ofria, Wolfgang Banzhaf
2025 B ed.
EuroGP
Bing Xue, Luca Manzoni, Illya Bakurov
2025 J jnl
CoRR
Mark Kocherovsky, Illya Bakurov, Wolfgang Banzhaf
2025 B conf
EuroGP
Mark Kocherovsky, Marzieh Kianinejad, Illya Bakurov, Wolfgang Banzhaf
2024 B conf
CEC
Francesco Marchetti, Mauro Castelli, Illya Bakurov, Leonardo Vanneschi
2024 J jnl
Genet. Program. Evolvable Mach.
Illya Bakurov, Jose Manuel Muñoz Contreras, Mauro Castelli, Nuno M. Rodrigues, Sara Silva, Leonardo Trujillo, Leonardo Vanneschi
2024 J jnl
CoRR
Wolfgang Banzhaf, Illya Bakurov
2024 A conf
GECCO
Wolfgang Banzhaf, Illya Bakurov
2024 J jnl
CoRR
Illya Bakurov, Nathan Haut, Wolfgang Banzhaf
2023 J jnl
Inf. Sci.
Davide Farinati, Illya Bakurov, Leonardo Vanneschi
2023 J jnl
IEEE Trans. Image Process.
Illya Bakurov, Marco Buzzelli, Raimondo Schettini, Mauro Castelli, Leonardo Vanneschi
2023 J jnl
Genet. Program. Evolvable Mach.
Illya Bakurov, Marco Buzzelli, Raimondo Schettini, Mauro Castelli, Leonardo Vanneschi
2022 J jnl
Swarm Evol. Comput.
Illya Bakurov, Mauro Castelli, Francesco Fontanella, Alessandra Scotto di Freca, Leonardo Vanneschi
2022 A conf
GECCO
Illya Bakurov, Marco Buzzelli, Mauro Castelli, Raimondo Schettini, Leonardo Vanneschi
2022
Illya Bakurov
2022 J jnl
Expert Syst. Appl.
Illya Bakurov, Marco Buzzelli, Raimondo Schettini, Mauro Castelli, Leonardo Vanneschi
2021 J jnl
Swarm Evol. Comput.
Illya Bakurov, Mauro Castelli, Olivier Gau, Francesco Fontanella, Leonardo Vanneschi
2020 B conf
EvoApplications
Leonardo Lucio Custode, Ciro Lucio Tecce, Illya Bakurov, Mauro Castelli, Antonio Della Cioppa, Leonardo Vanneschi
2020 conf
LIM
Illya Bakurov, Marco Buzzelli, Mauro Castelli, Raimondo Schettini, Leonardo Vanneschi
2020 J jnl
Appl. Soft Comput.
Irene Azzali, Leonardo Vanneschi, Illya Bakurov, Sara Silva, Marco Ivaldi, Mario Giacobini
2019 C conf
IJCCI
Illya Bakurov, Mauro Castelli, Francesco Fontanella, Leonardo Vanneschi
2019 B conf
EuroGP
Irene Azzali, Leonardo Vanneschi, Sara Silva, Illya Bakurov, Mario Giacobini
2019 B conf
EvoApplications
Illya Bakurov, Mauro Castelli, Leonardo Vanneschi, Maria João Freitas
2018 conf
PPSN (1)
Illya Bakurov, Leonardo Vanneschi, Mauro Castelli, Francesco Fontanella
2018 conf
GECCO (Companion)
Palina Bartashevich, Illya Bakurov, Sanaz Mostaghim, Leonardo Vanneschi
2018 C conf
EvoMUSART
Illya Bakurov, Brian J. Ross
2018 conf
PPSN (1)
Palina Bartashevich, Illya Bakurov, Sanaz Mostaghim, Leonardo Vanneschi
2017 B conf
CEC
Leonardo Vanneschi, Illya Bakurov, Mauro Castelli
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