タグ

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

  • ぷよぷよのアルゴリズムとMSX BASIC

    再帰が現実的でないBASICで「盤面が与えられた時にどのぷよが消えるか」を計算するアルゴリズムが当時どうしても思いつかず「ぷよぷよ」にハマった時からずっと考えていました。 そしてある授業中に突然アルゴリズムがひらめきました。 以下がそのアルゴリズムのご紹介です。 フィールドが以下の様になっていると想定します。形だけ見ると「連鎖を作ろうとしてたけどやらかしちゃった」形ですね。 この場合、赤い「ぷよ」が消えることになります。 基的な方針としては「左上から注目する場所(セル)を右下まで走査する」「注目したセルにある「ぷよ」がいくつつながっているか調べる」です。 1. まず、左上のセルに注目します。 2. 左上のセルには何も無かったので次のセルに注目します。 このセルには赤い「ぷよ」が居ました。 これ以降はこの赤い「ぷよ」がいくつつながっているか(=消せるか)をチェックします。 3.「この「ぷよ

    ぷよぷよのアルゴリズムとMSX BASIC
  • 様々なrate limitアルゴリズム - Carpe Diem

    概要 インターネットに晒されているWebサービスでは TV等で紹介されたことによる大量流入 悪意ある人物からの攻撃 クライアントのバグに依る大量リクエスト など、来想定していた以上のトラフィックが来ることはよくあります。 単純にシステムを構築すると大規模トラフィックに対応できずシステムがスローダウンしてしまうため、何かしらrate limitをかけておいた方が良いです。 ただしrate limitと一口に入っても色々あるため、今回は主なrate limitアルゴリズムを紹介します。 Leaky bucket Leaky bucketはデータ転送レートを一定にする(=上限を設定する)アルゴリズムです。 下の図のように、様々な流量の水流がそのバケツに流れ込んでも小さな穴からは一定の水流が流れ出す仕組みです。 ref: What is the difference between token

    様々なrate limitアルゴリズム - Carpe Diem
  • 「フーリエ級数」から「高速フーリエ変換」まで全部やります!【2019.07.20更新】

    このスライドでは, ・フーリエ級数 ・複素フーリエ級数 ・フーリエ変換(連続) ・離散フーリエ変換(DFT) ・高速フーリエ変換(FFT) を解説しています. ブログはこちら 【フーリエ解析05】高速フーリエ変換(FFT)とは?内側のアルゴリズムを解説!【解説動画付き】 https://kenyu-life.com/2019/07/08/what_is_fft/ Twitter → https://twitter.com/kenyu0501_?lang=ja Youtube → https://youtu.be/zWkQX58nXiw

    「フーリエ級数」から「高速フーリエ変換」まで全部やります!【2019.07.20更新】
  • J-GLOBAL 科学技術総合リンクセンター

    Copyright (c) 2009 Japan Science and Technology Agency. All Rights Reserved

    J-GLOBAL 科学技術総合リンクセンター
  • File Dependency Example

    原文 ファイル依存関係の例 計算機科学において抽象グラフの最も一般的な用途は、依存関係の追跡である。 私たち(このドキュメントを読んでいるあなたを含めて)の日常における依存関係 追跡の一例を示すと、コーディングしたプログラムソースファイルにおける コンパイル依存性で、これらの依存性は、make や Visucal C++ のような IDE といったビルドシステム内部で、いくらかの変更が行われた ソースファイルに対して、再コンパイルしなければならないファイル数を 最小限にするために使用される。 図1に、killerapp というプログラムを 作成するために使用されるソースファイル、オブジェクトファイル、ライブラリファイルそれぞれを頂点として表現したグラフを示した。グラフ中の線は、 どのファイルが他のファイルを作成するのに使用されるか示す。 矢印の方向をどちらにするかという点は任意であるが、慣

  • アルゴリズムとは何か!? ~ 文系理系問わず楽しめる精選 6 問 ~ - Qiita

    今の場合は A さんが 31 歳の場合のストーリーでしたが、A さんが 20 歳~ 35 歳のうちのどの年齢であったとしても、似たようなストーリーで必ず 4 回の質問で当てることができます!(他の例も是非考えてみてください。) ちなみに、このような「真ん中で切ってどちらかに絞って行く」タイプのアルゴリズムには二分探索法という名前がついています。応用情報技術者試験でも頻出のテーマですので馴染みのある方も多いと思います。 1-2. つまり、アルゴリズムとは 上の年齢当てゲームという問題では、相手の年齢を当てる「方法・手順」を二分探索法に基づいて導きました。このようにアルゴリズムとは、 問題を解くための方法・手順 のことです。さて、アルゴリズムと聞くと「コンピュータ上で実装されたプログラム」のことを思い浮かべる方も多いと思いますが、必ずしもコンピュータと関係がある必要はなく、日常生活でも多々登場

    アルゴリズムとは何か!? ~ 文系理系問わず楽しめる精選 6 問 ~ - Qiita
  • ソートアルゴリズムを極める! 〜 なぜソートを学ぶのか 〜 - Qiita

    NTT データ数理システムでリサーチャーをしている大槻 (通称、けんちょん) です。 今回はソートについて記します。 0. はじめに データ構造とアルゴリズムを学ぶと一番最初に「線形探索」や「ソート」が出て来ます。これらのテーマは応用情報技術者試験などでも頻出のテーマであり、アルゴリズムの Hello World とも呼ぶべきものです。 特にソートは、 計算量の改善 ($O(n^2)$ から $O(n\log{n})$ へ) 分割統治法 ヒープ、バケットなどのデータ構造 乱択アルゴリズムの思想 といった様々なアルゴリズム技法を学ぶことができるため、大学の授業でも、アルゴリズム関連の入門書籍でも、何種類ものソートアルゴリズムが詳細に解説される傾向にあります。記事でも、様々なソートアルゴリズムを一通り解説してみました。 しかしながら様々な種類のソートを勉強するのもよいが、「ソートの使い方」や

    ソートアルゴリズムを極める! 〜 なぜソートを学ぶのか 〜 - Qiita
  • diffの動作原理を知る~どのようにして差分を導き出すのか | gihyo.jp

    UNIXの基的なコマンドの1つであるdiff。 これに実装されているアルゴリズムは実に興味深い世界が広がっています。 稿では、筆者が開発した独自ライブラリ「dtl」をもとに「diffのしくみ」を解説します。 はじめに diffは2つのファイルやディレクトリの差分を取るのに使用するプログラムです。 ソフトウェア開発を行っている方であれば、SubversionやGitなどのバージョン管理システムを通して利用していることが多いかと思います。稿ではそのdiffの動作原理について解説します。 差分の計算の際に重要な3つの要素 差分を計算するというのは次の3つを計算することに帰結します。 編集距離 2つの要素列の違いを数値化したもの LCS(Longest Common Subsequence) 2つの要素列の最長共通部分列 SES(Shortest Edit Script) ある要素列を別の要

    diffの動作原理を知る~どのようにして差分を導き出すのか | gihyo.jp
  • Consistent hash

    (in japanese)コンシステントハッシュ法の簡単な説明でうす。ネットでググって出てくる以上の内容はありませんRead less

    Consistent hash
  • QuickDrawはどのように素早く円を描いていたのか? - ザリガニが見ていた...。

    かつてのMac OS9までの描画エンジンの主役はQuickDrawが担っていた。GUIなOSでは、文字も含めてすべてをグラフィックとして扱うので、画面に見えているすべてのもの*1はQuickDrawによって描かれていたことになる。描画エンジンは、GUIなOS開発の要となる技術である。その出来が、GUIなOS開発の成否を分けるとも言える。 そして、最初期のQuickDrawは、ビル・アトキンソンがたった一人で開発したそうである。 当時(25年以上前)のCPUは、動作クロックが8MHzという性能だった。(現在は2GHz=2000MHzかつ、複数コアが当たり前) そのような性能であっても、違和感なくマウスで操作できるOS環境にするために、斬新な発想や試行錯誤を重ね、相当な努力の末に開発されたのがLisaやMacintoshであった。 Amazon.co.jp: レボリューション・イン・ザ・バレー

    QuickDrawはどのように素早く円を描いていたのか? - ザリガニが見ていた...。
  • GNU grepが高速な理由

    why GNU grep is fast (なぜGNU grepは高速なのか)といったタイトルの興味深いメールがFreeBSD開発者メーリングリストに投函された。メールを出したのはGNU grepのオリジナル開発者であるMike Haertel氏。Mike Haertel氏はFreeBSDユーザでもあり、FreeBSD開発者メーリングリストで興味深いやりとりがあったため、このメールを流したとしている。Mike Haertel氏の紹介する内容はgrep(1)の実装のみならず、高速な文字列処理を実現するひとつの方法として参考になる。紹介されているGNU grep高速さの秘訣は次のとおり。 GNU grepは入力バイトのすべてをチェックするようなことは避けている。 GNU grepはバイトごとに適用する操作を極力最小限に減らしている。 GNU grepはBoyer-Mooreアルゴリズムとルック

    GNU grepが高速な理由
  • 1時間でわからせたコンシステントハッシュで仮想ノードが必要な理由 - 西尾泰和のはてなダイアリー

    ConsistentHashing - コンシステント・ハッシュ法 とあるチャットで聞かれて図まで書いて解説したのでもったいないからエントリー化。ちなみにチャットが1時間弱だったのでこういうタイトルにした。 で、Bが消えるとBの責任範囲が全部Dに押し付けられてDがかわいそうでしょ。 Dの仕事が増えるでしょ。Cとか暇そうじゃん!サーバを複数用意しているメリットが薄れてる。みんなが同じくらい働くのが望ましい。 で、Bが1個の点で表現されているから「Bの手前」もDの1個だけで、そのせいで全部Dが引き受けるはめになった。つまり、仕事が細かく分割されてなくて1個の塊だから引き継ぐ人も1人だけで引き継いだ人涙目。あらかじめ仕事を100分割しとけばみんなで分担して肩代わりできて幸せだよね。 だからサーバが5個だけど点は5個じゃなくて500個打とう。それが仮想ノード。 実装はどうするの?という質問に対して

    1時間でわからせたコンシステントハッシュで仮想ノードが必要な理由 - 西尾泰和のはてなダイアリー
  • Racanhack コード解説

    図目次1-1. すべての部屋が通路でつながっていない例1-2. まずは全体がrect[0]です。1-3. rect[0]を、分割します。rect[0]とrect[1]ができました。1-4. rect[0]を、分割します。rect[0]とrect[2]ができました。1-5. rect[2]を、分割します。rect[2]とrect[3]ができました。1-6. 各区画にひとつずつ部屋を作ります。1-7. 各分割線ごとに部屋を通路でつなぎます。1-8. まずは全体がrect[0]です。1-9. rect[0]を、横に分割します。rect[0]とrect[1]ができました。1-10. rect[0]を、横に分割します。rect[0]とrect[2]ができました。1-11. rect[2]をまたぐことになり、困ります。1-12. このように賢く分割するようにしてもいいです。2-1. タスクのイメージ。

  • ITエンジニアなら知っておきたい、今更聞けないアルゴリズムの種類一覧 - paiza times

    Photo by Oferico 皆さんはアルゴリズムやデータ構造について勉強したことはありますか?そして、基的なアルゴリズムについて、どのようなものがあって、どのようなときに使うとよいかといったことを説明することができますか? 仕事をしていると、プログラミング言語等の勉強や業務に忙しくて、正直アルゴリズムどころではないという場合がほとんどでしょう。しかし、いつか勉強しようと思っていたけど、基的なアルゴリズムにどんなものがあるのかなんて今更聞けないな……ということもあるかと思います。 今回はそんな方に向けて、基的なアルゴリズムの一部の概要に加え、アルゴリズムの勉強に役立つサイト、書籍をご紹介したいと思います。 ■アルゴリズムを学ぶ意味 例えば、ソート等については、通常はすでにソート関数があるので、自分で作らなくても済む=アルゴリズムも勉強しなくていいと思ってしまうかもしれません。しか

    ITエンジニアなら知っておきたい、今更聞けないアルゴリズムの種類一覧 - paiza times
    akanehara
    akanehara 2015/10/20
    「今どきこんなの知らなくていい」ってのがこの手の話題で必ず湧くけど、使うだけにしても性質を知らないと適切な選択ができないよねえ。たとえばコレクションライブラリの実装クラスとかどうやって選ぶんだろ。
  • visualising data structures and algorithms through animation - VisuAlgo

    VisuAlgo.net/en visualising data structures and algorithms through animation VisuAlgo is a trilingual site. Try visiting the other versions of VisuAlgo other than the default English version, e.g., Chinese or Indonesian. Users can see the translation statistics for these three pages. We aim to make all three has near 100% translation rate. Unfortunately the translation progress with other language

    visualising data structures and algorithms through animation - VisuAlgo
  • 素因数分解アルゴリズム(特にSQUFOF)のこと - 再帰の反復blog

    主要な素因数分解アルゴリズム SQUFOFについて 目次 主要な素因数分解アルゴリズム 素因数の性質に依存するアルゴリズム(ρ法、p-1法、楕円曲線法) 素因数の性質に依存しないアルゴリズム(SQUFOF、二次ふるい法、一般数体ふるい法) SQUFOFについて 連分数をもちいた素因数分解 シャンクスの改良 アルゴリズムの説明 例 アルゴリズムの改良 Schemeによるプログラム例 主要な素因数分解アルゴリズム ここでいう素因数分解アルゴリズムは完全に素因数分解をするアルゴリズムではなく因数(約数)をひとつ見つけ出すアルゴリズムなので、完全な分解が必要なら再帰的に実行したり試し割り法と組み合わせる必要がある。 素因数の性質に依存するアルゴリズム(ρ法、p-1法、楕円曲線法) 都合のよい性質を持った素因数を含んでいる場合に成功するアルゴリズム。都合のよい素因数を含んでいる場合は、汎用のアルゴリ

  • トップページ | Programming Place Plus アルゴリズムとデータ構造編

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

    トップページ | Programming Place Plus アルゴリズムとデータ構造編
  • ハッシュは二分木(ツリー)より速い(ハッシュとツリーの速度比較) - プログラマはサイコロを振らない

    ハッシュは遅いという意見があるようだが、実装や使い方を誤らなければ、基的にツリーよりハッシュの方が速い。 (この記事は以前書いた「ハッシュは当に遅いのか?いや、遅くない(反語)」を簡潔にまとめたものです) ハッシュとツリーの速度を比較した結果が次のグラフだ(ハッシュはパラメータを適切に設定(後述))。挿入、参照(検索)、削除の合計時間を測定した。(横軸は要素数、縦軸は時間、横軸は対数スケール) 「ハッシュは当に速いのか?」の検証 速いはずのハッシュが二分木にはかないません。ハッシュは速いという常識をくつがえす結果となりました。 http://www.s34.co.jp/cpptechdoc/article/hash/:itle=ハッシュは当に速いのか? Googleで「ハッシュ 速い」で検索すると上記のページが一番上に表示される(2008-08-04現在)。しかし、このページに掲載

    ハッシュは二分木(ツリー)より速い(ハッシュとツリーの速度比較) - プログラマはサイコロを振らない
  • 衝突判定編

    ホーム < ゲームつくろー!< 衝突判定編 衝突判定編 ゲームで絶対に必要になるのが「衝突判定」です。ぶつかる物があって、初めて世界が生まれます。ここでは、衝突(Collision)にトコトンこだわってみました。 (当は自分の学習のためでもあります(^-^;)

  • サルでも分かるwaifu2xのアルゴリズム

    ログイン

    サルでも分かるwaifu2xのアルゴリズム