タグ

アルゴリズムに関するkenichiiceのブックマーク (66)

  • GitHub - mapbox/earcut.hpp: Fast, header-only polygon triangulation

    kenichiice
    kenichiice 2023/06/12
    A C++ port of earcut.js, a fast, header-only polygon triangulation library.
  • Python言語による実務で使える100+の最適化問題 | opt100

    はじめに 書は,筆者が長年書き溜めた様々な実務的な最適化問題についてまとめたものである. 書は,Jupyter Laboで記述されたものを自動的に変換したものであり,以下のサポートページで公開している. コードも一部公開しているが,ソースコードを保管した Github 自体はプライベートである. を購入した人は,サポートページで公開していないプログラムを 圧縮ファイル でダウンロードすることができる. ダウンロードしたファイルの解凍パスワードは<に記述>である. 作者のページ My HP 書のサポートページ Support Page 出版社のページ Pythonによる実務で役立つ最適化問題100+ (1) ―グラフ理論と組合せ最適化への招待― Pythonによる実務で役立つ最適化問題100+ (2) ―割当・施設配置・在庫最適化・巡回セールスマン― Pythonによる実務で役立つ

  • 行列積計算を高速化してみる|やまもと

    機種名   :MacBook Pro CPU    :Dual-Core Intel Core i5 動作周波数 :2.9GHz プロセッサ数:1 コア数   :2 SMT    :有効 L1キャッシュ:32KB L2キャッシュ:コアあたり256KB L3キャッシュ:4MB明示されていませんが、購入時期から考えて、CPUのマイクロアーキテクチャはSkylake Microarchitecture(最新資料だと、Skylake Client Microarchitecture)だと思われます。 動作周波数は、CPUIDの情報だと基が2.9GHz、最大が3.3GHzに設定されていました。CPU使用量が増加すると、Tarbo Boost テクノロジーによって、自動的に動作周波数が上がる可能性があります。 コア数は2個ありますが、まずは1コア性能を向上させたいと思います。SMT(ハイパー・スレッ

    行列積計算を高速化してみる|やまもと
  • https://crates.io/crates/ryu/

  • GitHub - spinute/ods: Open Data Structures の日本語ソースコード

    You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.

    GitHub - spinute/ods: Open Data Structures の日本語ソースコード
  • 二分探索アルゴリズムを一般化 〜 めぐる式二分探索法のススメ 〜 - Qiita

    0. はじめに 二分探索法は単純ながらも効果が大きく印象に残りやすいもので、アルゴリズム学習のスタート地点に彩られた花という感じです。二分探索というと「ソート済み配列の中から目的のものを高速に探索する」アルゴリズムを思い浮かべる方が多いと思います。巨大なサイズのデータを扱う場面の多い現代ではそれだけでも十分実用的ですが、二分探索法はもっとずっと広い適用範囲を持っています。 記事では、二分探索法のエッセンスを抽象化して、適用範囲の広い「二分探索法の一般形」を紹介します。同時に無数にある二分探索の実装方法の中でも「めぐる式二分探索」がバグりにくいと感じているので、紹介したいと思います。 注意 1: 二分探索の計算時間について 二分探索の計算時間について簡単に触れておきたいと思います。例えば「$n$ 個の要素からなるソート済み配列から目的の値を探索する」というよく知られた設定であれば、 単純な

    二分探索アルゴリズムを一般化 〜 めぐる式二分探索法のススメ 〜 - Qiita
  • Ruby 2.6.0とより高速なcsv - 2018-12-25 - ククログ

    Rubyの標準添付ライブラリーのcsvをメンテナンスしている須藤です。 歴史 csvは名前の通りCSVを読み書きするための便利ライブラリーです。 もともとRuby体とは別に開発されていたのですが、Ruby 1.8.0のときにRuby体にバンドルするようになりました。dRubyやREXMLがRuby体にバンドルされたのも同じタイミングです。Ruby 1.8.0のときにバンドルするライブラリーをすごく増やしたのです。(その頃の様子がわかるURLをここに置いておきたかったけど見つけられなかった。。。) Rubyではcsvのようにrequireするだけで使えるライブラリーを「標準添付ライブラリー」と呼んでいます。Stringのようにrequireしなくても使えるライブラリーは。。。なんだろう。組み込みクラスかしら。 その後、Ruby 1.9.0のタイミングで実装をFasterCSVに置き換え

    Ruby 2.6.0とより高速なcsv - 2018-12-25 - ククログ
  • 確率的データ構造を使って巨大な集合を定数メモリで近似しよう

    巨大な集合に対して、定数メモリ&定数時間で近似値を計算できる、確率的データ構造の紹介スライドです。 スライドは、株式会社エフ・コードの社内勉強会(2018/08/30)にて使用されたものです。

    確率的データ構造を使って巨大な集合を定数メモリで近似しよう
    kenichiice
    kenichiice 2018/09/13
    bloom filter, count min-sketch, hyperloglog
  • トップページ | Programming Place Plus アルゴリズムとデータ構造編

    トップページ ここは、Programming Place Plus の、アルゴリズムとデータ構造編のトップページです。 各種アルゴリズムとデータ構造に関して、詳細な解説や、C言語を使った具体的な実装例があります(C言語についての情報は、C言語編を参照してください)。 データ構造 整列アルゴリズム 探索アルゴリズム その他のアルゴリズム APPENDIX リンク集 参考書籍

    トップページ | Programming Place Plus アルゴリズムとデータ構造編
  • 「数え上げテクニック集」を公開しました - DEGwerのブログ

    この記事は、「『競プロ!!』 競技プログラミング Advent Calendar 2017」の 20 日目の記事として書かれました。 「数え上げテクニック集」を pdf として公開しました。最近の数え上げの問題を解くテクニックを体系的にまとめた資料です。想定している対象読者層は青〜赤下位程度のレーティングの方です。

    「数え上げテクニック集」を公開しました - DEGwerのブログ
  • DocBaseの同時編集機能を実現しているアルゴリズム – KRAY Inc.

    はじめに 皆さんはGoogleドキュメントやHackMDを使ったことはあるでしょうか。これらのツールは「ネット越しに同時に複数の人で1つのドキュメントを編集できる」という特徴を持っています。お互いの編集がリアルタイムに反映されるので、相手が何を書くのかを意識することなく、簡単にドキュメントを複数人で編集することができます。これを実現するためには、同時編集に参加しているユーザ全員の編集内容がネットワークの延滞に影響されることなく、それぞれの編集内容をうまい具合にマージして反映してくれるような賢いアルゴリズムが必要になります。今回はこのアルゴリズムに関して書きます。 編集内容のマージとは 編集内容をうまい具合にマージしなければいけないケースを考えてみます。 AさんとBさんが次のドキュメントを同時編集するとします。最初は、お互いブラウザ上では次のように見えています。当然、この状態ではお互いに見え

    DocBaseの同時編集機能を実現しているアルゴリズム – KRAY Inc.
  • テキストエディター「Mery」ベータ版 Ver 2.6.3 を公開、64 ビット版も追加

    先日、風呂上がりに洗濯機の横にゴキブリを発見。 アースジェットをプシューと吹きかけるとサッと洗濯機の下に逃げ込みやがる。かと思いきや、反対側から出てきたものだから、うぉりゃぁ!とアースジェットを吹きかける。そしたらすごいスピードでまた反対側から出てくるじゃない。コイツ、やりおるな……。 一撃でしとめる必要がありそうだ。 気づかれないようにそ~っと雑誌を丸めて戦闘態勢、メガネを装着。 「ただの枯れ葉やんけ!」 ってなわけで、気分的には安定版なのですが、まだベータ版です。 新機能 安定版にするぞと思っていた矢先に鬼雲 6.1.3 がリリースされまして、正規表現エンジンを差し替えるのに安定版とは言いづらく、かといって 6.1.2 のまま安定版ですってリリースするのも気が引けたので、ついでに 64 ビット版も公開します。 と思って、公開しようとした矢先に今度は Windows 10 Fall Cr

    テキストエディター「Mery」ベータ版 Ver 2.6.3 を公開、64 ビット版も追加
  • 差分検出アルゴリズム三種盛り - Object.create(null)

    こんばんは. 気がつけばもうずいぶんと涼しくなってきました. 勢い余って凍ってしまったりせぬよう, くれぐれも普段の言動にはお気をつけください. はじめに さて, 我々人類にはどうしても二つの文字列 (あるいは行ごとに区切られたテキスト) 間の差分を求めなければいけない瞬間が発生します. 先人たちはそういった時のために diff のようなツールを開発し, それを利用することで文明はめざましい発展を遂げてきました. しかしながら, 使用するアルゴリズムを比較検討したい場合, 「差分」の定義を変えるなどして既存のアルゴリズムに変更を加えたい場合, diff のない異世界に飛ばされて自分で実装しなければいけない時などにおいては, 差分検出アルゴリズムについての理解が必要不可欠です. というわけで, この記事では文字列間の差分検出とは何かということと, 差分を求める三種類のアルゴリズムの紹介・解説

    差分検出アルゴリズム三種盛り - Object.create(null)
  • Spaghetti Source - k-最短路

    説明 グラフ G と始点終点の対 (s,t) が与えられたとき,s-t パスの中で k 番目に短いものを求める問題を k-最短路問題という. この問題に対する最も基的な解法は,優先度付きキューを用いてダイクストラ調にグラフを探索し,通常なら最短距離が確定した頂点を切り捨てるところを k 個の最短距離が確定した頂点を切り捨てるようにすることである(以下に実装を示した).この方法で計算量 O(k E log V) が達成できる.多くの応用ではこれで十分だと考えられる. 理論的にはもっと頭の良い解法が提案されており,例えば Eppstein による deviation に基づくアルゴリズムは O(k + E + V log V) を達成する.しかし,このアルゴリズムはパスを管理するデータ構造を持たなければならず,シンプルに実装するのは難しい.そこで以下では Eppstein の方法を参考にした

    kenichiice
    kenichiice 2017/07/28
    「グラフ G と始点終点の対 (s,t) が与えられたとき,s-t パスの中で k 番目に短いものを求める問題を k-最短路問題という.」
  • BK-tree を golang で実装した - 右上➚

    先日はてぶに 興味深いデータ構造:BK木 | プログラミング | POSTD という翻訳記事 ( 元記事 http://signal-to-noise.xyz/post/bk-tree/) があがっているのをみて初めて BK-tree というものを知ったので,golang で実装してみました. github.com BK-tree とは 先程の記事に全部書いてあるのですが… BK-tree は,ある距離空間内で近傍点探索を効率的に行えるデータ構造です.利用例としてはスペルチェックや類似画像検索などがあります. 距離空間とは,なにかしらの距離を計算することができる空間のことで,距離としてハミング距離やマンハッタン距離,レーベンシュタイン距離,ユークリッド距離などなどが挙げられます. 例えば,いわゆる普通の 3 次元の空間は,ユークリッド距離を距離関数に持つ距離空間と考えられます. 近傍点探索

    BK-tree を golang で実装した - 右上➚
    kenichiice
    kenichiice 2017/05/15
    「BK-tree は,ある距離空間内で近傍点探索を効率的に行えるデータ構造です.」
  • 言語処理100本ノック 2015

    言語処理100ノックは,実践的な課題に取り組みながら,プログラミング,データ分析,研究のスキルを楽しく習得することを目指した問題集です 実用的でワクワクするような題材を厳選しました 言語処理に加えて,統計や機械学習などの周辺分野にも親しめます 研究やデータ分析の進め方,作法,スキルを修得できます 問題を解くのに必要なデータ・コーパスを配布しています 言語はPythonを想定していますが,他の言語にも対応しています

  • リトライと冪等性のデザインパターン - Blog by Sadayuki Furuhashi

    リトライを肴に一晩酒が飲める古橋です。 大規模なデータに触れることが日常茶飯事になっている今日この頃。この分野のおもしろいところは、いつまで経っても終わらないプログラムを簡単に作れてしまうことかもしれません。エラー処理、リトライそして冪等性*1の3つを抑えていないプログラムは、小規模なデータなら問題ないが、データ量が多くなると使い物にならなくなる可能性が大です。 大規模データをバッチ処理するケース以外でも、リトライは一般にプログラムの信頼性に関わる重要な問題です。 そんなわけで、リトライに関わるいくつかのデザインパターンを、連載でまとめておこうと思います*2。 では、第1回は背景から: なぜリトライが必要なのか プログラムは色々な理由で失敗する。例えば、 A) 通信先のプログラムが高負荷すぎて応答できなかった B) メモリを消費しすぎてメモリ確保に失敗した。またはOOM KIllerに殺さ

    リトライと冪等性のデザインパターン - Blog by Sadayuki Furuhashi
  • 2つの期間が重なり合うかどうかを判定する。 - こせきの技術日記

    2つの期間 A〜B と X〜Y が重なっているかどうかを判定したい場合。 のように4つのパターンがある。これを単純に、 A <= X && Y <= B || X <= A && Y <= B || A <= X && B <= Y || X <= A && B <= Yのように判定してはいけない。 Xは青い線の上を、Yは赤い線の上を動くとき、A〜B と X〜Y は重なり合う。この条件は、 X <= B && A <= Yこれで4つのパターンをカバーできる。ORは不要。始点と終点をわかりやすく書くと以下になる。 始点2 <= 終点1 && 始点1 <= 終点2アルゴリズムに名前がありそうな気がするけど、見つけられなかった。 (追記) 矩形の重なり判定の方が情報が見つかった。 * Life is beautiful: ビル・ゲイツの面接試験-私の場合 * 長方形の重なりを判定する問題 - ザ

    2つの期間が重なり合うかどうかを判定する。 - こせきの技術日記
  • 二分探索サンプルコード集(コピペ用) - まめめも

    二分探索は、感覚的なわかりやすさに反してバグが入りやすいことで有名なアルゴリズムです。20 の教科書のうち 15 でバグっていたという報告もあるそうです。 実際、自分も書くたびにバグに苦しんできました。変な値を返すだけでなく、out of bounds アクセスや無限ループもよく起きます。一旦動いたと思っても、後になってバグが発症することも多く、たちが悪いです。 そこで、きちんとテストした二分探索のサンプルコードを自分のコピペ用に作ってみました。 動作仕様 (境界探索版) ソートした配列 a に対して、「値が c 以上になる範囲のうちの一番左のインデックス」を返す関数 bsearch_min を書きます。 a = [0, 1, 1, 1, 2, 2, 2, 3] p bsearch_min(a, 2) #=> 4 値が c 以上になる値がない場合は a.size を返します。空配列の場合は

    二分探索サンプルコード集(コピペ用) - まめめも
  • 伝説のお茶の間 No007-09(1) 円の描画(1) MichenerとBresenham

    最初に言っておきますが デジタル円はアスペクト比の関係上、真円には近づきません。どうあがいても。 ピクセル自体が縦長なので円もちょっと縦長です。 アスペクト比の修正は各アプリケーションで行うほうがいいので、 今回はR * R ピクセルの正方形と考えてアルゴリズムを組みます。 ご了承ください。 デジタル円の描画のアルゴリズムは2、3種類があります。 ブレゼンハム(Bresenham)、ミッチェナー(Michener)が一般的です。 OpenFMIというサイトの中のページで "Comparing Circle Drawing Algorithms"という C のソース http://openfmi.net/snippet/detail.php?type=snippet&id=8 が紹介されています。 同一コード内にブレゼンハム、ミッチェナー等の関数も用意されており、ソースとしては完璧です。 ち

    kenichiice
    kenichiice 2016/04/22
    「ミッチェナー(Michener)、Bresenham(ブレゼンハム)等のアルゴリズムを用いた円描画の紹介と解説です。」