タグ

algorithmに関するymm1xのブックマーク (20)

  • ランダウの記号 - Wikipedia

    スターリングの公式はランダウの記号を用いてと書くこともできる。 ランダウの記号(ランダウのきごう、英: Landau symbol)は、主に関数の極限における漸近的な挙動を比較するときに用いられる記法である。英語圏では一般的にビッグ・オー(Big O)と呼ばれる。 ランダウの漸近記法 (asymptotic notation)、ランダウ記法 (Landau notation) あるいは主要な記号として O (数字の0ではない)を用いることから(バッハマン-ランダウの)O-記法 (Bachmann-Landau O-notation[1])などともいう。 記号 O はドイツ語のOrdnungの頭字にちなむ[2]。 なおここでいうランダウはエトムント・ランダウの事であり、『理論物理学教程』の著者であるレフ・ランダウとは別人である。 ランダウの記号は数学や計算機科学をはじめとした様々な分野で用い

    ランダウの記号 - Wikipedia
  • PHPとPythonとRubyの連想配列のデータ構造が同時期に同じ方針で性能改善されてた話 - hnwの日記

    PHPPythonRubyの連想配列のデータ構造がそれぞれ4〜5年ほど前に見直され、ベンチマークテストによっては倍以上速くなったということがありました。具体的には以下のバージョンで実装の大変更がありました。 PHP 7.0.0 HashTable高速化 (2015/11) Python 3.6.0 dictobject高速化 (2016/12) Ruby 2.4.0 st_table高速化 (2016/12) これらのデータ構造はユーザーの利用する連想配列だけでなく言語のコアでも利用されているので、言語全体の性能改善に貢献しています1。 スクリプト言語3つが同時期に同じデータ構造の改善に取り組んだだけでも面白い現象ですが、さらに面白いことに各実装の方針は非常に似ています。独立に改善に取り組んだのに同じ結論に至ったとすれば興味深い偶然と言えるでしょう2。 稿では3言語の連想配列の従来実

    PHPとPythonとRubyの連想配列のデータ構造が同時期に同じ方針で性能改善されてた話 - hnwの日記
  • 圧倒的性能を持ったクイックソートアルゴリズムが凄い【アルゴリズム】

    バブルソート:https://www.youtube.com/watch?v=IHFBb0wYBR0 シェーカーソート:https://www.youtube.com/watch?v=-Sz9GixUAzQ Twitter:https://twitter.com/PhysicsKJ Instagram:https://www.instagram.com/physicskj/ Twitter ID:@PhysicsKJ いつもありがとうございます。 ゲームチャンネルもよろしくお願いします! https://www.youtube.com/channel/UCo_G8PEhG_6DDFWhsgYsuEw ゆるーいセカンドチャンネルはこちら! https://www.youtube.com/channel/UC-XoVyYw4UlQ85kGDK4MInA スポンサー登録して下さる方はこちら

    圧倒的性能を持ったクイックソートアルゴリズムが凄い【アルゴリズム】
    ymm1x
    ymm1x 2019/05/12
    わかりやす
  • 本当に実用的なたったひとつのソートアルゴリズム - CARTA TECH BLOG

    コンテンツメディア事業部の新卒エンジニアがお送りいたします。 突然ですが、皆さんの好きなソートアルゴリズムはなんですか? 私は基数ソートのスマートでストイックな雰囲気に惹かれます。 とはいえ、普段の開発では「どのソートアルゴリズムを使うか」を意識することは少ないのではないでしょうか。 むしろ現実世界で「トランプが全部揃ってるか」を手作業で確認するときとかのほうが、実はソートアルゴリズムが必要なのかもしれません。 ということで(?)、そのような現実的な場面で、当に実用的なソートアルゴリズムを決める戦いが始まりました。 選手紹介 今回試したソートアルゴリズムは、独断と偏見で選んだ以下の5種類。 1 挿入ソート シンプル・イズ・ベスト!正直言ってベンチマークの噛ませ犬! 2 クイックソート 「クイック」の名前はダテじゃない!王者の貫禄を見せてやれ! 3 マージソート 安定感のある隠れた実

    本当に実用的なたったひとつのソートアルゴリズム - CARTA TECH BLOG
  • Google 認証システムの仕組み

    著者:関 勝寿 公開日:2016年3月26日 - 最終更新日:2022年12月31日 キーワード: security Google アカウントの2段階認証プロセスでは、Google 認証システムをモバイル端末にインストールして、QRコード(バーコード)を読み込ませることで、30秒ごとに変化する6桁の確認コードを生成することができる。通常のパスワード認証に加え、確認コードによる認証をすることで、セキュリティを高めている。Amazon, Microsoft, Facebook, Dropbox, GitHub 等多くのサービスで同じシステムが採用されている。この仕組みについて記す。 概要 Google 認証システムで採用されているRFC 6238の時間ベースのワンタイムパスワード (TOTP)は、サーバーとクライアントで共有する秘密鍵と現在時刻から、確認コードを計算するアルゴリズムである。 G

    Google 認証システムの仕組み
  • 約3年かけてプログラマ向けニュース推薦アプリを作り直した話 - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? 概要 『もっとより良いニュースアプリはできないだろうか』 そう考えてMenthasというニュースアプリを開発し、プログラマ向けニュースキュレーションサービスを作ってみた話 という記事をQiitaに書き、自分の予想を超えた反響を受けてから約3年になります。 しばらく開発の更新は留まってしまいましたが、ニュース推薦に関しての探求が終わったわけではなく、むしろ見えてきた課題のために数多くの論文を読んだりプロトタイピングを繰り返していました。 そしてつい先日、これまで解けなかった問題に対してようやく答えを自分なりに導き出すことができたため、骨格

    約3年かけてプログラマ向けニュース推薦アプリを作り直した話 - Qiita
  • 2018年のパスワードハッシュ - Qiita

    数年前であれば仕方なかったところですが、2018年の今となっては、パスワードハッシュの手動計算はもはや"悪"です。 まずログイン認証と称してmd5とかsha1とか書いてあるソースはゴミなので投げ捨てましょう。 hashやcryptは上記に比べればずっとマシですが、使い方によっては簡単に脆弱になりえます。 あと『パスワードを暗号化する』って表現してるところも見なくていいです。 PHPには、ハッシュに関わる諸々の落とし穴を一発で解消してくれるpassword_hashという超絶便利関数があるので、これを使います。 というか、これ以外を使ってはいけません。 以下はフレームワークを使わずに実装する際の例示です。 フレームワークを使っている場合は当然その流儀に従っておきましょう。 ハッシュの実装 データベース ユーザ情報を保存するテーブルを作成します。 パスワードカラムの文字数は、システム上のパスワ

    2018年のパスワードハッシュ - Qiita
  • ZIP,LHAの圧縮の仕組み - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    ZIP,LHAの圧縮の仕組み - Qiita
  • 【Unity】ソートアルゴリズム12種を可視化してみた - Qiita

    はじめに ソートアルゴリズムの学習として、12種のソートアルゴリズムを実装して可視化してみました。 Unityにはあまり関係がなさそうな話題ですが、Unity上で作ったのでUnityタグをつけます。 バブルソート バブルソートのアルゴリズムは以下のような感じです。 配列の要素を最初から最後まで見ていき、順序が逆の要素があれば入れ替える 全ての要素の順序が正しくなるまで 1.を繰り返す. void BubbleSort(int[] a) { bool isEnd = false; int finAdjust = 1; // 最終添え字の調整値 while (!isEnd) { bool loopSwap = false; for (int i = 0; i < a.Length - finAdjust; i++) { if (a[i] < a[i + 1]) { Swap(ref a[i],

    【Unity】ソートアルゴリズム12種を可視化してみた - Qiita
  • B TreeとB+ Treeの違い - Carpe Diem

    概要 インデックスに対してMongoDBはB Treeを採用し、MySQLのInnoDBはB+ Treeを採用しています。 どうして採用しているアルゴリズムが違うのだろう?と思って調べてみました。 主な違い B+ TreeはほとんどB Treeと同じですが、以下の点が異なります。 リーフノードとリーフノードを結ぶポインタがある データはリーフノードのみに保持する 具体例 言葉だけだと分かりにくいので、Visualizeするツールを使って具体例を表示します。 [1, 2, 3, 4, 5, 6, 8, 10, 15, 18]という数列に対し、Order: 3で作ってみます。 Orderは1ノードから出る枝の数のことです。 B Tree B-Tree Visualization B+ Tree B+ Tree Visualization 先程のB Treeと違って、データはリーフノードに持つの

    B TreeとB+ Treeの違い - Carpe Diem
  • HMAC - Wikipedia

    HMAC-SHA1の生成 HMAC (Hash-based Message Authentication Code または keyed-Hash Message Authentication Code) とは、メッセージ認証符号 (MAC; Message Authentication Code) の一つであり、秘密鍵とメッセージ(データ)とハッシュ関数をもとに計算される。 1997年2月、IBMのKrawczykらにより提唱され、RFC 2104として公開されている。また、FIPS PUB 198にも採用されている。 MACは認証及び改竄検出技術の核となるアルゴリズムである。HMACアルゴリズムは、MAC値(タグ)の算出に暗号学的ハッシュ関数を用いる。ハッシュ関数としては、SHA-2やSHA-3など任意の繰返し型ハッシュ関数を適用可能であり、ハッシュ関数Xを用いるHMACは、HMAC-X

    HMAC - Wikipedia
  • コンシステントハッシュ法 - Wikipedia

    コンピュータ科学の分野で、コンシステントハッシュ法(Consistent hashing)とは、ハッシュテーブルのサイズが変更された時、をキーの数、をスロット数とすると、平均個のキーのマッピングの変更のみでハッシュテーブルの機能を提供することのできる、特殊なハッシュ法である。それに対して、その他の多くのハッシュ法では、キーとスロット間のマッピングがモジュラ演算によって定義されているため、ハッシュテーブルのスロット数が変化するとほぼすべてのキーが再マッピングされてしまう。分散システムの一形態である分散キャッシュなどで利用されている。 コンシステントハッシュは、ランデブーハッシュ(英語版)(HRWハッシュとも呼ばれる)と同じ目的を達成するハッシュ法であるが、2つの手法は異なるアルゴリズムを使用しており、同時に独立して開発された。 スロットのハッシュ値をソートしてリストに管理する。前提条件として

    ymm1x
    ymm1x 2017/02/28
    シャーディング
  • 一体いつからRedisがSorted Setの実装にSkip Listしか使ってないと錯覚していた? - 愛と勇気と缶ビール

    デフォルトの設定 (zset-max-ziplist-entries, zset-max-ziplist-value) では 該当するSorted Setのエントリ数が128個以下 該当するSorted Setに含まれるmember (not score) のデータ長が全て64byte以下 という2つの条件が成立している場合、Sorted Setの表現にはSkip ListではなくZip Listというデータ構造が使われる。ZADD, ZCOUNT等の実装もどちらのデータ構造を使っているかのフラグで分岐している。 Zip Listはポインタを使わずデータとそのオフセットだけで表現された双方向リストであるため、空間効率はよいが全体のサイズが大きくなるとすぐ使えなくなる。 Redisにおいては、Sorted Setへのinsertに際して上記条件のどちらかが満たされなくなった場合にZip Li

    一体いつからRedisがSorted Setの実装にSkip Listしか使ってないと錯覚していた? - 愛と勇気と缶ビール
    ymm1x
    ymm1x 2016/10/06
    Zip List -> Skip List
  • Skip List: Find/Remove

  • スキップリスト - Wikipedia

    スキップリスト(英: skip list)は、平衡二分探索木と似た用途に使う乱択アルゴリズムのデータ構造。連結リストを並列に連結させて作る。比較により順序づけ可能な要素を挿入し、スキップリスト内ではソートされた状態で保持される。ソートされた連想配列や集合の実装などに使える。挿入と探索と削除は平均O(log n)である。1989年にウィリアム・ピューが発表した[1][2][3][4]。 スキップリストは順序つきの連結リストの前向きの飛び越しのリンクを追加したものである。ノードは幾何分布や負の二項分布にてランダムに高さを設定して追加され(高さ1が確率50%、高さ2が25%、高さ3が12.5%など)、リスト上の探索において連結リストの一部を高速に飛ばすことができる。 スキップリストの例。1〜10を追加し、ソートされた状態で保持されている。 スキップリストはリストの階層になっている。最下層は通常の

  • 計算量のはなし(Redisを使うなら必読!O(logN)など)

    The document discusses optimization techniques for deep learning frameworks on Intel CPUs and Fugaku aimed architectures. It introduces oneDNN, a performance library for deep learning operations on Intel CPUs. It discusses issues with C++ implementation, and how just-in-time assembly generation using Xbyak can address these issues by generating optimal code depending on parameters. It also introdu

    計算量のはなし(Redisを使うなら必読!O(logN)など)
  • MD5やSHAの代替として利用可能な新たなハッシュ化技術「BLAKE2」登場 | OSDN Magazine

    12月21日、ハッシュアルゴリズム「BLAKE2」とそのCおよびC#実装が公開された。BLAKE2はMD5やSHAといったハッシュアルゴリズムの代替として利用できるもので、セキュリティに優れ高速に動作するのが特徴という。 BLAKE2は、与えられた入力に対し指定されたビット長のハッシュ値を生成するためのアルゴリズム。既存のハッシュアルゴリズムであるMD5よりもセキュリティに優れ、かつSHAよりも高速に処理を実行できるのが特徴という。 同様のハッシュアルゴリズムとしてSHA-2やその後継となるSHA-3(Keccak)などがあるが、BLAKE2はSHA-3アルゴリズムの候補の1つであったBLAKEを改良したものとなっている。BLAKE2はSHA-3やBLAKEと同等のセキュリティを備えつつ、64ビット環境においてMD5と同等の速度で動作し、SHA-2やSHA-3と比べて33%少ないメモリで動

    MD5やSHAの代替として利用可能な新たなハッシュ化技術「BLAKE2」登場 | OSDN Magazine
    ymm1x
    ymm1x 2016/09/08
    "既存のハッシュアルゴリズムであるMD5よりもセキュリティに優れ、かつSHAよりも高速に処理を実行できるのが特徴"
  • お互いのブログにブックマークしあう集団「はてな互助会」のメンバーリスト

    お互いのブログにブックマークしあう集団「はてな互助会」のメンバーリスト 2016-07-05-1 [HatenaWork][Release] 「はてな互助会」のメンバーを自動判定して抽出しています。その一覧(序列順)を公開します。 相互ブクマはてなブロガーリスト(旧名:はてな互助会メンバーリスト)追記160706: 名称を変更しました。「互助会」という言葉が一人歩きしやすく、システムのための独自の定義をしても伝わりにくいため。長いのですが定義そのものを名称にしました。 リストは1時間ごとに自動更新されます。ランキング形式となっているので、該当ユーザは順位変動をお楽しみください。 はてな互助会とは? 「はてな互助会」とは何かについて説明します。諸説ありますが、今回のタスクにおける定義は下記の通り。 (1) はてなブックマークのユーザである(2) はてなブログのユーザである(はてなブログでブロ

    お互いのブログにブックマークしあう集団「はてな互助会」のメンバーリスト
  • SQLで木と階層構造のデータを扱う――入れ子集合モデル

    サービス終了のお知らせ いつもYahoo! JAPANのサービスをご利用いただき誠にありがとうございます。 お客様がアクセスされたサービスは日までにサービスを終了いたしました。 今後ともYahoo! JAPANのサービスをご愛顧くださいますよう、よろしくお願いいたします。

  • クイックソート - Wikipedia

    クイックソート(英: quicksort)は、1960年にアントニー・ホーアが開発したソートのアルゴリズム。分割統治法の一種。 個のデータをソートする際の最良計算量および平均計算量は (ランダウの記号)である。他のソート法と比べて一般的に最も高速だと言われている[2]が、対象のデータの並びやデータの数によっては必ずしも速いわけではなく、最悪の計算量はである。安定ソートではない。 クイックソートは以下の手順で行われる。 ピボットの選択:適当な値(ピボット(英語版)という)を境界値として選択する 配列の分割:ピボット未満の要素を配列の先頭側に集め、ピボット未満の要素のみを含む区間とそれ以外に分割する 再帰:分割された区間に対し、再びピボットの選択と分割を行う ソート終了:分割区間が整列済みなら再帰を打ち切る 配列の分割方法の一例として、以下のようなものが考えられる: 配列要素からピボット P

    クイックソート - Wikipedia
    ymm1x
    ymm1x 2015/02/19
    アニメーション楽しい
  • 1