タグ

ブックマーク / qiita.com/recuraki (2)

  • Pythonのハッシュ衝突攻撃の考察3: setの理解と効率的な衝突の実践(anti-setの実践) - Qiita

    振り返り1: C++のハッシュ法 C++のunordered_set/unordered_mapでは現在のデータ構造のサイズを基にしたlinked-listを指すテーブルを持ちます。まず、入力値(key)のハッシュを得て、modを取りindexを定めます。各indexに対応するlinked-listの各要素はkeyを持ち、存在を管理・値を格納します。これがハッシュ法です。 入力がランダムの場合、indexはうまくばらけて各linked-listは浅い状態になります。テーブルのサイズを動的に変化させることで、平均計算量$O(1)$でのアクセスが可能です。しかし、毎回同じindexとなるような値(key)をN個入力すると特定のlinked-listの深さをNとすることが可能です。C++20であれば85229ul * iという値を$2e5$個入るようにすればanti-unordered_set/

    Pythonのハッシュ衝突攻撃の考察3: setの理解と効率的な衝突の実践(anti-setの実践) - Qiita
    sh19910711
    sh19910711 2024/06/09
    "Pythonのsetの各アクセスは期待時間計算量𝑂(1)ですが、これを𝑂(𝑁)とするような入力 / 衝突後の解決の実装はランダム探索だけを用いるdictと異なり二重ハッシュのランダム探索+線形探索でindの探索が行われ" 2023
  • オイラーツアーした木に対するクエリ - Qiita


    maspybeetmaspy maspy: Euler Tour  beet: 2Euler Tour  DFSRMQRSQ inout 辿   :  :  1 01DF
    オイラーツアーした木に対するクエリ - Qiita
    sh19910711
    sh19910711 2024/06/07
    "オイラーツアー: 根付き木を根からDFSして根に戻ってくるような経路 + RMQやRSQを適応することで木に対するいくつかのクエリを高速に処理できる / 各頂点のinとoutの時刻 + 辿った辺や頂点の重さ + 各頂点の深さ" 2020
  • 1