Ibrahim Furkan Ince

19 papers C 2Journal 11Unranked 5
YearRankTypeTitle / Venue / Authors
2026 J jnl
Comput. Stand. Interfaces
Bahman Arasteh, Asgarali Bouyer, Huseyin Kusetogullari, Ibrahim Furkan Ince
2026 J jnl
Knowl. Based Syst.
Ibrahim Furkan Ince, Husnu Baris Baydargil, Mustafa Eren Yildirim, Faruk Bulut
2025 J jnl
J. Electron. Test.
Bahman Arasteh, Faruk Bulut, Ibrahim Furkan Ince, Seyed Salar Sefati, Huseyin Kusetogullari, Farzad Kiani
2025 J jnl
Intell. Decis. Technol.
Bahman Arasteh, Seyed Salar Sefati, Mohammadbagher Karimi, Ibrahim Furkan Ince
2023 J jnl
J. Electronic Imaging
Faruk Bulut, Ibrahim Furkan Ince
2022 J jnl
Vis. Comput.
Ibrahim Furkan Ince, Faruk Bulut, Ilker Kilic, Mustafa Eren Yildirim, Omer Faruk Ince
2022 J jnl
J. Electronic Imaging
Faruk Bulut, Harisu Abdullahi Shehu, Ibrahim Furkan Ince
2021 J jnl
IEEE Access
Rabie A. Ramadan, Md. Haidar Sharif, Eissa Jaber Alreshidi, Md. Haris Uddin Sharif, Ibrahim Furkan Ince, Hiqmet Kamberaj, Ahmed Y. Khedr
2019 J jnl
Comput. J.
Ibrahim Furkan Ince, Yusuf Sait Erdem, Faruk Bulut, Md. Haidar Sharif
2016 conf
ITHET
Ilker Yengin, Ibrahim Furkan Ince
2016 J jnl
KSII Trans. Internet Inf. Syst.
Ibrahim Furkan Ince, Mustafa Eren Yildirim, Yücel Batu Salman, O. Faruk Ince, Geun-Hoo Lee, Jangsik Park
2014 conf
ICIC (3)
Ibrahim Sefik, Furkan Elibol, Ibrahim Furkan Ince, Ilker Yengin
2014 conf
ICIC (1)
Ibrahim Furkan Ince, Ilker Yengin
2011 conf
ICIC (2)
Ibrahim Furkan Ince, Adem Karahoca, Dilek Karahoca
2010
Ibrahim Furkan Ince
2010 J jnl
J. Digit. Content Technol. its Appl.
Ibrahim Furkan Ince, Manuel Socarras-Garzon, Tae-Cheon Yang
2009 conf
ICIC (1)
Ibrahim Furkan Ince, Tae-Cheon Yang
2009 C conf
ICIS
Ibrahim Furkan Ince, Yücel Batu Salman, Mustafa Eren Yildirim
2009 C conf
ICIS
Yücel Batu Salman, Ibrahim Furkan Ince, Ji Young Kim, Hong-In Cheng, Mustafa Eren Yildirim
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