タグ

algorithmに関するmactkgのブックマーク (26)

  • Why Aren't We SIEVE-ing? - Marc's Blog

    About Me My name is Marc Brooker. I've been writing code, reading code, and living vicariously through computers for as long as I can remember. I like to build things that work. I also dabble in machining, welding, cooking and skiing. I'm currently an engineer at Amazon Web Services (AWS) in Seattle, where I work on databases, serverless, and serverless databases. Before that, I worked on EC2 and

  • プロシージャル界隈で話題のMarkovJuniorについての解説

    先日、ConvChainやWaveFunctionCollpaseの開発で有名なMaxim Gumin氏の新作ライブラリがGitHubに公開された。それはMarkovJuniorというライブラリで、色を置き換えるためのルールを定義しておくことで、プロシージャルに画像を生成するというものになる。 公開から1ヶ月経たずにGitHubスター4,000超えの人気レポジトリだが、この記事公開時点では、ドキュメントの整備が追いついていないようなので、簡易ながらMarkovJuniorの性質や利用方法についての解説を書くことにした。 MarkovJuniorの置き換えルール

    プロシージャル界隈で話題のMarkovJuniorについての解説
    mactkg
    mactkg 2022/08/11
    おもしれー
  • ソートアルゴリズムを極める! 〜 なぜソートを学ぶのか 〜 - Qiita

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

    ソートアルゴリズムを極める! 〜 なぜソートを学ぶのか 〜 - Qiita
  • Amazonの推薦システムの20年

    IEEE Internet Computingの2017年5・6月号に "Two Decades of Recommender Systems at Amazon.com" という記事が掲載された。 2003年に同誌に掲載されたレポート "Amazon.com Recommendations: Item-to-Item Collaborative Filtering" が Test of Time、つまり『時代が証明したで賞』を受賞したことをうけての特別記事らしい 1。 「この商品を買った人はこんな商品も買っています」という推薦で有名なAmazonが1998年にその土台となるアルゴリズムの特許を出願してから20年、彼らが 推薦アルゴリズムをどのような視点で改良してきたのか 今、どのような未来を想像するのか その一端を知ることができる記事だった。 アイテムベース協調フィルタリング 20年前も

    Amazonの推薦システムの20年
  • 文字列アルゴリズムの学びかた - Hatena Developer Blog

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

    文字列アルゴリズムの学びかた - Hatena Developer Blog
    mactkg
    mactkg 2017/04/21
    最高だありがとうございます
  • アルゴリズムの勉強のしかた - きしだのHatena

    この記事で、アルゴリズムの勉強はアルゴリズムカタログを覚えることじゃないよということを書きました。 プログラムの理論とはなにか アルゴリズムの勉強というのは、スポーツで言えば腕立て伏せや走り込みみたいな基礎体力を養うようなもので、「ソートなんか実際に自分で書くことないだろう」とかいうのは「サッカーは腕つかわないのに腕立ていらないだろう」とか「野球で1kmも走ることなんかないのに長距離の走り込みいらないだろう」とか言うようなものです。 Twitterでアルゴリズムの勉強とはなにかと尋ねられて、「アルゴリズムの基的なパターンを知って、それらの性質の分析のしかたをしって、いろいろなアルゴリズムでどのように応用されているか知って、自分が組むアルゴリズムの性質を判断できるようになることだと思います。 」と答えたのですが、じゃあ実際どういうで勉強すればいいか、ぼくの知ってるからまとめてみました。

    アルゴリズムの勉強のしかた - きしだのHatena
  • [CEDEC 2011]AIに命を。「ぽかぽかアイルー村」のアフォーダンス指向によるAI事例と「ARMORED CORE V」の三次元的な移動経路検索

    [CEDEC 2011]AIに命を。「ぽかぽかアイルー村」のアフォーダンス指向によるAI事例と「ARMORED CORE V」の三次元的な移動経路検索 ライター:箭進一 CEDEC 2011で,「AIに命を吹き込むには」と題されたショートセッションが行われた。 このセッションでは,PSP用ソフト「モンハン日記 ぽかぽかアイルー村」(以下,アイルー村)と,「ARMORED CORE V」(PS3/Xbox 360)以下,ACV)のAIに,どんな工夫が凝らされているのかが解説された。 アイルー1匹当たり1500行のAI フロム・ソフトウェア制作二部,並木幸介氏 最初に登壇したのは,アイルー村のAI開発を担当したフロム・ソフトウェア制作二部のプログラマーである並木幸介氏。 作は人気キャラクターであるアイルーが,狩りや採集などを行い,村を発展させながら仲間を増やしていくという内容のゲーム。いか

    [CEDEC 2011]AIに命を。「ぽかぽかアイルー村」のアフォーダンス指向によるAI事例と「ARMORED CORE V」の三次元的な移動経路検索
  • A* - Wikipedia

    A*探索アルゴリズム A*(A-star、エースター)探索アルゴリズム(エースターたんさくアルゴリズム)は、グラフ探索アルゴリズムの一つ。 最良優先探索を拡張したZ*に、さらにf値として「現時点までの距離」g と「ゴールまでの推定値」h の和を採用したもの[1]。h は ヒューリスティック関数と呼ばれる。 A* アルゴリズムは、「グラフ上でスタートからゴールまでの道を見つける」というグラフ探索問題において、 ヒューリスティック関数 h(n) という探索の道標となる関数を用いて探索を行うアルゴリズムである。h は各頂点 n からゴールまでの距離のある妥当な推定値を返す関数で、解くグラフ探索問題の種類に応じてさまざまな h を設計することが出来る。 例えば、カーナビなどで用いられる単純な二次元の地図での探索では、h としてユークリッド距離 を使うことができ、この値は道に沿った実際の距離のおおま

    A* - Wikipedia
  • 幅優先探索 - Wikipedia

    ドイツの都市間の接続を示した例 フランクフルトから幅優先検索を行った場合にできる木構造 幅優先探索(はばゆうせんたんさく、英: breadth first search)はグラフ理論(Graph theory)において木構造(tree structure)やグラフ(graph)の探索に用いられるアルゴリズム。アルゴリズムは根ノードで始まり隣接した全てのノードを探索する。それからこれらの最も近いノードのそれぞれに対して同様のことを繰り返して探索対象ノードをみつける。「横型探索」とも言われる。 幅優先探索は解を探すために、グラフの全てのノードを網羅的に展開・検査する。最良優先探索とは異なり、ノード探索にヒューリスティクスを使わずに、グラフ全体を目的のノードがみつかるまで、目的のノードに接近しているかどうかなどは考慮せず探索する。 アルゴリズム[編集] 根ノードを空のキューに加える。 ノードをキ

    幅優先探索 - Wikipedia
  • クラスカル法 - Wikipedia

    クラスカル法(英: Kruskal's algorithm)は、グラフ理論において重み付き連結グラフの最小全域木を求める最適化問題のアルゴリズムである。 概要[編集] このアルゴリズムは、1956年にジョゼフ・クラスカル(英語版)が Proceedings of the American Mathematical Society で発表した (pp. 48–50)。 クラスカル法は貪欲法の一種で、最小全域木を求める他のアルゴリズムとしては、プリム法、逆削除法(英語版)、ブルーフカ法などがある。最小全域木とは、グラフの全ての頂点を含む木で、辺の重みの総和が最小のものを言う。連結されていないグラフでは、「最小全域森」(それぞれの連結部分の最小全域木の集合)を求められる。 アルゴリズムの解説[編集] クラスカル法の手順は次の通り。 グラフの各頂点がそれぞれの木に属するように、森(木の集合) F

    クラスカル法 - Wikipedia
  • 素集合データ構造 - Wikipedia

    素集合データ構造(そしゅうごうデータこうぞう、英: disjoint-set data structure)は、データの集合を素集合(互いにオーバーラップしない集合)に分割して保持するデータ構造。このデータ構造に対する以下の2つの便利な操作をUnion-Findアルゴリズムと呼ぶ。 Find: 特定の要素がどの集合に属しているかを求める。2つの要素が同じ集合に属しているかの判定にも使われる。 Union: 2つの集合を1つに統合する。 これら2つの操作をサポートしているため、素集合データ構造は「Union-Findデータ構造」あるいは「Merge-Find集合」とも呼ばれる。これら以外の重要な操作として MakeSetがある。これは、与えられた1つの要素だけを格納した集合(シングルトン)を作成する。これら3つの操作により、様々な実用的分割問題を解くことができる(「応用」の節を参照)。 これ

  • A Memory-Efficient Doubly Linked List | Linux Journal

    In the quest to make small devices cost effective, manufacturers often need to think about reducing the memory size. One option is to find alternative implementations of the abstract data types (ADTs) we are used to for our day-to-day implementations. One such ADT is a doubly linked list structure. In this article, I present a conventional implementation and an alternative implementation of the do

    mactkg
    mactkg 2014/07/28
    二重連結リスト、次ノードと前ノードへのポインタのdiffさえあれば良くて、ポインタ二つ要らなくね?っていう提案。頭いいー!
  • SIGHT & LIGHT - How to create 2D visibility/shadow effects for your game

    Hello! Today, I will show you how to make something like this: (move your mouse around in the box below) This effect is used in my open-source indie game, Nothing To Hide. It's also found in many other 2D games, like Monaco, Gish, and if this tutorial does its job... maybe your next game! I will show the steps & mistakes I personally made while learning how to create this effect. First, some boile

    SIGHT & LIGHT - How to create 2D visibility/shadow effects for your game
  • 隠れマルコフモデルの例

    隠れマルコフモデルの例 その2 Pythonで隠れマルコフモデルのFilteringの例 Pythonで隠れマルコフモデルのSmoothingの例 隠れマルコフモデルとは、システムがパラメータのわからないマルコフ性を持つとする確率モデルです。マルコフ性とはその過程の将来状態の条件付き確率分布が、現在の状態のみにより決まり、過去のどんな状態にもよらないという特性のことです。ここではこのモデルの例を記します。 ある友達が遠くに住んでいて、毎日何をしたかをあなたに電話で話します。友達は「散歩」「買物」「掃除」の3つのことにしか関心がありません。友達が何をするかはもっぱらその日の天気で決めます。あなたは友達が住んでいるところの天気の明確な情報は持っていません。でも、どんな傾向があるかは知っています。友達が日々電話で話す出来事に基づいて、友達が住んでいるところの天気を推定してみましょう。 天気は離散

    隠れマルコフモデルの例
  • 中学生にもわかるウェーブレット行列 - アスペ日記

    id:echizen_tm さんの記事「ウェーブレット木の効率的で簡単な実装 "The Wavelet Matrix"」から始まったウェーブレット行列ブームから半年以上が過ぎ、すでに枯れた技術として確立されつつある感があります。 …嘘です。 日以外ではあんまり来ていません。 理由としては、やはりアルファベット圏では単語境界が明確であるため、こちらの記事で書かれているような「キーワード分割の難易度」といったことがあまり問題にならないということがあるかもしれません。 まあ、そういうわけで局所的に来ているウェーブレット行列ですが、日語をはじめとする単語境界のない言語圏にとっては重要なネタであると思うため、解説記事を書き直して*1みようと思います。 ウェーブレット行列でできること 主となる操作は、文字列に対する 定数時間の rank() と select()*2 です。 rank() は、「文

  • アルゴリズムとデータ構造

    アルゴリズムとかデータ構造というのは、プログラミングの基礎中の基礎ですね。いまどきは、いろいろな言語において標準ライブラリで提供されていたりしますから、ただ使うだけならこれらを1から自分で書けるようになってもそんなにうれしくはないですが、必要な場面でよりよいアルゴリズムを選択できるように、概要くらいは知っておきたい物です。というわけで、ここではアルゴリズムとデータ構造についての話をしていこうかと思います。 説明やサンプルには、有無を言わせず C# を使います。 うちは C# 入門サイトですから。 ある意味、「C# によるプログラミング入門」のサンプルプログラムの延長みたいなページになってるかも。

    アルゴリズムとデータ構造
  • 竹内関数で音楽生成 - aike’s blog

    Lisperの人ならみんな知ってる竹内関数(たらいまわし関数)という関数があります。 定義としてはこんな感じ。 そのシンプルな定義からは想像もつかないほど複雑で膨大な再帰呼び出しがおこなわれるとても興味深い関数です。たとえば引数にTarai(10,5,0)を与えると343,073回も再帰呼び出しされたりします。 この関数呼び出しの引数がどのように変化するか知りたくてプログラムを書いて調べてみたところ、Tarai(10,5,0)の場合は3つの引数がそれぞれ0〜10(xは-1〜10)の間で少しずつ変化するなかで、2つの値を固定してひとつの値が下降していくような挙動があったりして、なんだか音楽の3和音のコード進行を思わせるような動き方です。 そういうことなら、ということで実際に音にして聴いてみました。Tarai関数が呼ばれるたびに引数のx、y、zを、0=ミ、1=ファ、2=ソ、……、のように音に割

    竹内関数で音楽生成 - aike’s blog
  • 竹内関数が音楽的に聴こえる理由について考えてみた - aike’s blog

    前回のエントリーが予想以上に反響が大きくてびっくりしています。 プログラミング言語好きの僕にとってはヒーローみたいなすごいプログラマーたちにツイートしてもらってびびっていたところ、今日になって竹内先生ご人からのコメントをいただいてしまって気で腰抜かしそうになりました。せっかくなので自分なりに竹内関数が音楽的に聴こえる理由についての考えを書いてみます。 ■ちょっとした工夫 最初に少し種明かしをすると、より音楽的になるように以下のような工夫をしています。 ・ダイアトニックスケール(白鍵)だけを使用し調性の外れた音が出ないようにした ・最小値(-1)をレにわりあてることで少し寂しげなドリアンスケールにした (とはいえ-1の出現頻度が低いのでミからはじまるフリジアンスケール的かも) ・オートアルペジオ、テンポ、音色の設定でミニマルミュージック風にした 上記のことをおこなうと、ただの乱数でもわり

    竹内関数が音楽的に聴こえる理由について考えてみた - aike’s blog
  • 拡張ユークリッド互除法

    ユークリッドの互除法は最大公約数を計算する効率的な方法として古くから知られている方法です。 これについては,ユークリッドの互除法の項で説明しました。ここでは,その発展系の一つで色々なところでよく使われている,拡張ユークリッド互除法について説明します。 ユークリッドの互除法は2つの自然数 x,y の最大公約数を効率的に計算する方法でした。 例えば,GCD(13,5) を計算するのに, 13=2*5+3   5=1*3+2    3=1*2+1 2=2*1      を求めて,GCD(13,5)=1 とするものでした。今の場合この計算は,全く自明で,互除法は不要な感じがします。しかし,少し視点を変えるとそうとも言えません。上の式のうち最後の項を除いて,それぞれ,移項すると, 13-2*5=3 5-1*3=2 3-1*2=1 が得られます。ここで,3行

    mactkg
    mactkg 2012/02/26
    拡張ユークリッドの控除法
  • ジェネレーティブアート - Wikipedia

    この記事には独自研究が含まれているおそれがあります。問題箇所を検証し出典を追加して、記事の改善にご協力ください。議論はノートを参照してください。(2023年2月) ジェネラティブアート[1][2]またはジェネレーティブアート[3][4](英: Generative Art)は、コンピュータソフトウェアのアルゴリズムや数学的/機械的/無作為的自律過程によってアルゴリズム的に生成・合成・構築される芸術作品を指す。コンピュータの計算の自由度と計算速度を活かし、自然科学で得られた理論を実行することで、人工と自然の中間のような、統一感を持った有機的な表現を行わせる作品が多い。 ジェネラティブアートは、創作方法として自然科学的なシステムを主体として用いた芸術である。前提として、自律的に動作する機構を設計して作品制作を行わなければならない点が、他の芸術分野との違いであると言える。システムによる作品は、複