タグ

algorithmに関するMonMonMonのブックマーク (52)

  • キャッシュと向き合う、キャッシュと共に生きる / cache pattern

    PHPerKaigi 2024の登壇資料です。 https://phperkaigi.jp/2024/ - https://speakerdeck.com/moznion/pattern-and-strategy-of-web-application-caching - https://soudai.hatenablog.com/entry/cache-strategy

    キャッシュと向き合う、キャッシュと共に生きる / cache pattern
  • MySQLのインデックスですが、B-treeではなくB+treeを使用するのはどうしてなのでしょうか? | mond

    MySQLのインデックスですが、B-treeではなくB+treeを使用するのはどうしてなのでしょうか? 端的に言うと性能が良いからです。 これを理解するにはバッファプールへの理解が必要です。ディスク指向のデータベースの上では有限のメモリを最大限活用することでメモリに入り切らない巨大なデータ群に対して良好な参照性能を出す必要があります。バッファプールとはディスク上のデータの羅列を固定サイズのページ(InnoDBの場合16KB)の羅列であるとして読み書きに必要な分だけをメモリに移し取り複数の書き込みをできる限りメモリ内で受け止めて後でまとめてディスクに書き戻すという、ライトバック型のキャッシュのような機構です。 この中においてバッファプールは有限のサイズしか無いので適宜プール内のデータを書き戻して入れ替えながら上手くやっていく必要があります。 さてB+treeとB-treeの最大の違いは木のリ

    MySQLのインデックスですが、B-treeではなくB+treeを使用するのはどうしてなのでしょうか? | mond
  • strlen() の深淵 - Qiita

    あらまし strlen() という関数がある。御存知の通り、文字列の長さを算出する標準 C ライブラリの関数だ。 やってることは単純で、例えば以下のように実装できる。 size_t strlen_simple(const char* str) { const char* p = str; while (*p) ++p; return size_t(p - str); } '\0' が見つかるまでポインタを進め、初期位置との差分を返すだけだ。これで機能的には std::strlen() と同等である。 では、速度的にはどうだろう?適当にベンチマークを書いて MSVC 2022 でコンパイル&実行するとこうなった。

    strlen() の深淵 - Qiita
  • 徐々に高度になるリングバッファの話 - Software Transactional Memo

    リングバッファのイメージ図 1. リングバッファとは何か 機能的にはFirst In First Out (FIFO)とも呼ばれるキューの一種であるが、リング状にバッファを置いてそれの中でReadとWriteのインデックスがグルグルと回る構造をとる事によって容量に上限ができることと引き換えに高速な読み書き速度を得たものである。キューを単に実装するだけなら山ほど方法があって線形リストを使ってもいいしスタックを2つ使っても原理的には可能だ。その中でもリングバッファを用いた方法の利点はひとえに性能の高さでありメモリ確保などを行わないお陰でシステム系の様々な場所で使われている。 これの実装自体は情報系の大学生の演習レベルの難度であるが少し奥が深い。まずリングバッファのスタンダードなインタフェースと実装は以下のようなものである。 class RingBuffer { public: explicit

    徐々に高度になるリングバッファの話 - Software Transactional Memo
  • Pythonコードを35000倍に高速化したい

    はじめに Pythonは世界的にも人気のあるプログラミング言語ですが、実行速度については課題があります。Pythonの実行速度を高速化したい、という要求は根強く、これまでにも様々な処理系が開発されています。 この記事はPythonで書かれたコードを35000倍に高速化するにはどのような方法があるかについてまとめたものです。 この記事は: Pythonで書かれたアルゴリズムを35000倍に高速化する 事前コンパイル、並列化、SIMD演算を駆使する 最終的に44000倍まで高速化できた なぜ35000倍? 2023年5月2日にModular社よりPythonの使いやすさとC言語の性能を兼ね備える新しいプログラミング言語、Mojoの開発について発表がありました。低レベルのハードウェア向けにコンパイル可能なこと、文法的にはPythonを踏襲しており、既存のPythonライブラリを利用可能であること

    Pythonコードを35000倍に高速化したい
  • それ、非再帰で書けます - Qiita

    この記事は再帰自体を全否定する趣旨ではありません。 両方の良さを理解した上で非再帰で書きたいと思ったときの参考にしていただければと思います。 まだ再帰関数書いてるの? 再帰関数はプログラミング言語の有用な機能で、深さ優先探索をベースとする様々なアルゴリズムの実装として有用です。 その一方で、関数呼び出しはオーバーヘッドが大きく、定数倍が弱くなります。また、JavaPythonなどのスタック領域の制限が厳し目の言語では深すぎる再帰のせいでRuntime Errorが発生する場合があります。 C++などのコンパイル言語ではインライン展開によって関数呼び出しのオーバーヘッド解消されることもありますが、再帰関数は中でもインライン展開の難易度が高く、深い再帰ではそのまま実行せざるを得ない状況になります。 ところが、再帰関数は生のスタックを自分で用意するなどして非再帰に書き直すことができます。(「停

    それ、非再帰で書けます - Qiita
  • Facebookが開発した圧縮アルゴリズムZstandardについて調べた(非常に高速)(今日から使えます) - Lambdaカクテル

    Common Lispの処理系であるSBCLをインストールしようとしたら、追加でlibzstd-develというのを新たに要求されるようになっていた。見るからに圧縮系のライブラリだけれど聞き慣れないのでちょっと調べてみた。 ちょろっと調べたところ、以下のことが分かった: Zstandard(ゼットスタンダード?)というのが正式な名前。 Facebookが開発した。 Deflateよりも速いことを主眼においている。 BSDライセンス。 Linuxカーネルまわりで使えるようになっているほか、一部のディストロではパッケージの圧縮フォーマットとして使われているようだ。 Webというよりはどちらかといえばバックエンド的な箇所で使われている印象がある。 facebook.github.io zstd コマンド使ってみた 他の名だたる圧縮アルゴリズム同様、Linuxで直接ファイルに対してこれを実行して圧

    Facebookが開発した圧縮アルゴリズムZstandardについて調べた(非常に高速)(今日から使えます) - Lambdaカクテル
  • Bit Twiddling Hacks

    By Sean Eron Anderson seander@cs.stanford.edu Individually, the code snippets here are in the public domain (unless otherwise noted) — feel free to use them however you please. The aggregate collection and descriptions are © 1997-2005 Sean Eron Anderson. The code and descriptions are distributed in the hope that they will be useful, but WITHOUT ANY WARRANTY and without even the implied warranty of

    MonMonMon
    MonMonMon 2022/09/03
    ビット演算あれこれ
  • 問題解決のための「アルゴリズム×数学」が基礎からしっかり身につく本

    このの概要 アルゴリズムは,プログラミングを用いて問題を解決していくには欠かせない大切な道具です。一方,アルゴリズムを理解し,そして応用できるようになるためには,ある程度の数学的知識と数学的考察力も大切です。 書では,中学レベル~大学教養レベルの数学的知識のうちアルゴリズム学習に必要なものについて扱うとともに,有名なアルゴリズムと典型的な数学的考察について丁寧に解説します。さらに,知識をしっかり身に付けるための例題・演習問題が全200問掲載されています。 こんな方におすすめ アルゴリズムとそれを支える数学について基礎から学びたい人 書のサンプル 書の紙面イメージは次のとおりです。画像をクリックすることで拡大して確認することができます。

    問題解決のための「アルゴリズム×数学」が基礎からしっかり身につく本
  • アルゴ式(beta)

    アルゴ式(beta)
  • アルゴリズム本、書きました! - けんちょんの競プロ精進記録

    1. はじめに お久しぶりです! けんちょんです。 これまで 3 年間にわたって、Qiita に、アルゴリズムに関するさまざまな話題を投稿し続けてきました: アルゴリズムとは何か!? 計算量オーダーの求め方を総整理! 動的計画法超入門! 再帰関数を学ぶと、どんな世界が広がるか スタックとキューを極める! ソートを極める! DFS (深さ優先探索) 超入門! 実世界で超頻出!二部マッチングの解法を総整理!‬ このたび、それらの記事を有機的にまとめ上げ、さらに多数のトピックを追加する形で、アルゴリズム入門書を上梓させていただくことになりました! 大槻兼資著、秋葉拓哉監修:問題解決力を鍛える!アルゴリズムとデータ構造 - amazon 発売予定日は 2020/9/30 となっています。講談社サイエンティフィク様からの発売となります。今回の記事では、このを通してお届けしたいメッセージや、想定読者

    アルゴリズム本、書きました! - けんちょんの競プロ精進記録
  • MPEG-5 EVCコーデックメモ - Qiita

    https://mpeg.chiariglione.org/standards/mpeg-5/essential-video-coding 正式名称「MPEG-5 Part 1 Essential Video Coding」 ISO/IEC 23094-1 Essential video coding 特許問題により普及しないH.265/HEVCコーデックの代替を狙った、ライセンス・フレンドリ(licensing-friendly)な動画像コーデック。 目的 ロイヤリティフリー(RF; Royalty-Free)な枯れた技術1のみを用いる Baseline Profile と、特許技術を用いてより高効率を目指す Main Profile という2オプションを提供する。 ロイヤリティフリー・コーデック運用ができるよう、任意の Main Profile 向け符号化ツールは選択的に無効化可能。

    MPEG-5 EVCコーデックメモ - Qiita
  • 文字列アルゴリズムの学びかた - Hatena Developer Blog

    こんにちは!はてなアプリケーションエンジニアの id:takuya-a です。 みなさんは、このような疑問をもったことはありませんか? grep はどのように文字列を検索しているのか? MeCab はどうやって辞書を高速にルックアップしているのか? パーサやコンパイラを作りたいけど、何から始めればいいのか? 稿では、「文字列アルゴリズムとはどんなものなのか?」「なぜ重要なのか?」「何を知っておくべきか?」「どうやって勉強すればいいのか?」といった疑問にお答えしていこうと思います。 文字列アルゴリズムの意外な応用や、モチベーションを保ちやすい勉強のしかた、文字列アルゴリズムを勉強するために行った社内での取り組み、実装するときのコツといったトピックについても触れています。 このエントリは、はてなエンジニアアドベントカレンダー2016の22日目の記事です。昨日は id:syou6162 さんに

    文字列アルゴリズムの学びかた - Hatena Developer Blog
  • 【執筆体験記】大学 1 年生が、アルゴリズムの本を書くまで - E869120's Blog

    0. はじめに こんにちは、東京大学 1 年の米田(@e869120)と申します1。私は競技プログラミング趣味であり、AtCoder や 日情報オリンピック などに出場しています。2021 年 12 月 30 日現在、AtCoder では赤(レッドコーダー)です。 この度、「アルゴリズム×数学」が基礎からしっかり身につく技術評論社より出版しました(既に発売されています)。アルゴリズムと数学を同時に習得できる新しい入門書です。の内容や特徴については、 アルゴリズムと数学を書きました - E869120's Blog をご覧いただければと思います。 実際、一冊のを完成させるというのは決して簡単なものではありませんでした。記事では、を書いたきっかけや、どのように執筆が進んだかについて記したいと思います。 目次 0. はじめに 目次 1. を書くことを決めるまで 1.1 競

    【執筆体験記】大学 1 年生が、アルゴリズムの本を書くまで - E869120's Blog
  • Apple製品でだけ違う表示にできる PNG ファイル

    PNG Parser Differential では、Apple のデバイスでだけ異なって表示される不思議な PNG ファイルが公開されています。 Windows + Chrome で見た同ページ iPad + Safari で見た全く同じページ (Chrome でも同じ) PNG の表示結果がまったく違い、”Hello World” が “Hello Apple” になっています。不思議ですね。 デビット・ブキャナン氏(David Buchanan)は、マルチスレッド対応のPNGデコーダを自作しようとしている時に、自分が作りこんだバグに気づいたということ。それは、一つのPNGファイルを分割してそれぞれを個別にzlibでデコードしたものを単純に結合しても、必ずしも元の画像に戻らないことに起因するバグだでした。リンク先には PoC のコードがあります。 もし分割の前半部分が非圧縮ブロックの途

    Apple製品でだけ違う表示にできる PNG ファイル
  • アルゴリズムと数学の本を書きました - E869120's Blog

    1. はじめに こんにちは、はじめまして。東京大学 1 年生の米田優峻(E869120)と申します。私は競技プログラミング趣味で、AtCoder や国際情報オリンピックなどの大会に出場しています1。2021 年 11 月時点で、AtCoder では赤色(レッドコーダー)です。また、2020 年以降、アルゴリズムを学べる以下のようなコンテンツや資料を作成してきました。 レッドコーダーが教える、競プロ上達ガイドライン 競プロ典型 90 問 50 分で学ぶアルゴリズム さて、このたびは技術評論社から、書籍を出版させていただくことになりました2。アルゴリズムと数学が同時に学べる新しい入門書です。 「アルゴリズム×数学」が基礎からしっかり身につく - amazon 発売日は今年のクリスマス、2021/12/25 です。電子書籍版も同時期に出る予定です。記事では、このの内容と想定読者について、

    アルゴリズムと数学の本を書きました - E869120's Blog
  • ロスレス画像圧縮: QOI(Quite OK Image) format

    QOI(Quite OK Image) format 2021年11月にDominic Szablewski氏(@phoboslab)の手による新しいロスレス画像圧縮「QOI(Quite OK Image) format」がアナウンスされました。 C言語のヘッダオンリー・ライブラリとしてわずか300行たらずで実装され、PNGフォーマットに近いデータ圧縮性能でありながら、20~50倍のエンコード速度、3~4倍のデコード速度を実現しています(作者自身によるアナウンス記事より)。 アナウンス記事: Lossless Image Compression in O(n) Time ソースコード: GitHub phoboslab/qoi ベンチマーク結果: QOI Benchmark Result この記事ではQOIフォーマットに関する個人的評価と、その画像圧縮アルゴリズムをざっくりと解説します。

    ロスレス画像圧縮: QOI(Quite OK Image) format
  • 50分で学ぶアルゴリズム / Algorithms in 50 minutes

    スライドでは、有名なアルゴリズムを概観し、アルゴリズムに興味を持っていただくことを目標にします。 第 1 部:アルゴリズムとは 第 2 部:学年を当ててみよう 第 3 部:代表的なアルゴリズム問題 第 4 部:コンピュータとアルゴリズム

    50分で学ぶアルゴリズム / Algorithms in 50 minutes
  • クリエイティブコーディングの教科書

    ゲームエンジンや3Dソフトウェアを利用して高度な表現ができるこの時代でも、プリミティブな描画や動き、アルゴリズムから学べることは多い。それらをJavaScriptで書くクリエイティブコーディングという形で学べる手引書が書となる。

    クリエイティブコーディングの教科書
  • 計算量オーダーの求め方を総整理! 〜 どこから log が出て来るか 〜 - Qiita

    NTT データ数理システムでリサーチャーをしている大槻 (通称、けんちょん) です。今回は計算量オーダーの求め方について書きます。 0. はじめに 世の中の様々なシステムやソフトウェアはアルゴリズムによって支えられています。Qiita Contribution ランキング作成のために用いるソートアルゴリズムのような単純なものから、カーナビに使われている Dijkstra 法、流行中のディープラーニングに用いられている確率的勾配降下法など、様々な場面でアルゴリズムが活躍しています。アルゴリズムとはどんなものかについて具体的に知りたい方には以下の記事が参考になると思います: アルゴリズムとは何か ~ 文系理系問わず楽しめる精選 6 問 ~ アルゴリズムを学ぶと $O(n^2)$ や $O(n\log{n})$ や $O(2^n)$ といった計算量オーダーの概念が登場します。こうした記法を見ると

    計算量オーダーの求め方を総整理! 〜 どこから log が出て来るか 〜 - Qiita