タグ

algorithmに関するthreeMonthsのブックマーク (32)

  • アルゴリズムを学ぼう

    関連サイト出版社による関連ページが公開されています。 アルゴリズムを学ぼう (KADOKAWA/アスキー・メディアワークス) 関連書籍書の続編『続・アルゴリズムを学ぼう』も好評発売中です。 内容紹介書のテーマは、ガチのアルゴリズムとデータ構造、そして計算量です。 いや、確かに書は女の子がいろいろでてきたり、小話が入っていたりと、ゆるふわなオーラが漂っています。しかし、あえていいましょう。それは、見かけだけである、と。 プログラミングを学ぶにあたって、アルゴリズムとデータ構造は、どの言語を用いるにしてもすべての基礎であり、避けて通ることはできない道です。アルゴリズムとデータ構造を知らずにプログラムを書くことは、無免許で車を運転するぐらいに危険な行為です。 しかし、アルゴリズムとデータ構造をきちんと理解せずに、プログラムを書いているプログラマーが多数いるのも事実です。それは、アルゴリズム

    アルゴリズムを学ぼう
  • 情報系修士にもわかるLOUDS - アスペ日記

    一回でわかりやすく書くのは難しいので、簡潔データ構造 LOUDS の解説(全12回、練習問題付き)というシリーズにまとめました。 (2014/01/26) 古い内容を削除しました。

    情報系修士にもわかるLOUDS - アスペ日記
  • 情報系修士にもわかるダブル配列 - アスペ日記

    最近話題の「日本語入力を支える技術」を途中まで読んだ。 3章がものすごく気合いが入っている。 trie(トライ)というデータ構造の2つの実装、「ダブル配列」と「LOUDS」について詳しく説明がされている。 ダブル配列については、ぼくは以前論文を読んで勉強しようとしたのだが、その時は難しくてあきらめた覚えがある。しかし、このの説明を読むことで理解ができた。 ありがたい。 感銘を受けたので、このを教材に友達と2人勉強会をした。 この2人勉強会というのは、ぼくが復習を兼ねて友達に教えるというのがだいたいのスタイル。 しかし、いざやってみるといろいろと難しい。 次のようなところでひっかかるようだ。 例のサイズが小さく、イメージを喚起するのが難しい。 最初の図のノード番号と、最終的なダブル配列上の位置が異なるため、混乱する。 単語終端について言及がないので、どのノードが単語を表しているかがわから

    情報系修士にもわかるダブル配列 - アスペ日記
  • あなたは解ける? Instagramがエンジニアを見つけるために出題した独創的な課題

    Tweet Instagramは個人的に大好きなアプリの1つ。 残念ながら、第一面はMy365が奪っていきましたが、一日に2枚目の写真を撮りたいときにはInstagramを起動しますし、彼らのミニマムな組織での展開は非常にこれからのスタートアップにとって、示唆的なものです。 ブログでも幾度と無く取り上げてきましたが(→『写真共有を軸としたプラットフォームとして成長するInstagram』、『知っておきたいInstagramに関する3つのこと』、『Instagram活用に見るソーシャルのトレンドを開拓している5つの先進的企業』)、今回はそんなInstagramが新しいエンジニアを採用するにあたって出題している問題が独創的かつ実用的なもので日でもこんな形での採用が増えたりしないかなーと思ったのでご紹介。 課題は非常にシンプル。 『下にある縦に割れ、並び替えられた画像を元に戻すコードを書く。

  • 高速な安定ソートアルゴリズム "TimSort" の解説 - Preferred Networks Research & Development

    先日、TimSortというソートアルゴリズムが話題になりました。TimSortは、高速な安定ソートで、Python(>=2.3)やJava SE 7、およびAndroidでの標準ソートアルゴリズムとして採用されているそうです。 C++のstd::sort()よりも高速であるというベンチマーク結果1が話題になり(後にベンチマークの誤りと判明)、私もそれで存在を知りました。実際のところ、ランダムなデータに対してはクイックソート(IntroSort)ほど速くないようですが、ソートというシンプルなタスクのアルゴリズムが今もなお改良され続けていて、なおかつ人々の関心を引くというのは興味深いものです。 しかしながら、オリジナルのTimSortのコードは若干複雑で、実際のところどういうアルゴリズムなのかわかりづらいところがあると思います。そこで今回はTimSortのアルゴリズムをできるだけわかりやすく解

    高速な安定ソートアルゴリズム "TimSort" の解説 - Preferred Networks Research & Development
  • 頻出典型アルゴリズムの演習問題としてよさげなやつ - kyuridenamidaのチラ裏

    効率的な別解とか存在する問題もあるけど演習によさそうなやつをピックアップ。そのアルゴリズムじゃないと解けないわけではないって問題も多いので注意。(ただ演習するのには都合が良いかなと)※個人的難易度をつけてみました。とても主観的な難易度付けなので気にせず解いてみてください。深さ優先探索・Balls[☆]・Sum of Integers[☆]・The Number of Island[☆]・Block[★]幅優先探索・Mysterious Worm[★]・Cheese[★]・Seven Puzzle[★☆]・Stray Twins[★★]・Deven-Eleven[★★]・Summer of Phyonkichi[★★☆]ワーシャルフロイド法(For 全点対最短路問題)・Traveling Alone: One-way Ticket of Youth[★]・A reward for a Car

  • 数学ガール/乱択アルゴリズム - Mae向きなブログ

    数学ガール 乱択アルゴリズム (数学ガールシリーズ 4)』を読んでます。数学ガールシリーズも書で4冊目ですが,乱択アルゴリズムでは擬似コードでアルゴリズムが紹介されています。読者の多くの方はプログラミング言語に親しまれている方だと思いますが,ひょっとして,書を通して初めてプログラムに触れるという方もいらっしゃるかもしれないということで,何個かプログラムにしてみました。Rubyで書いています。 Rubyがインストールされていないという方は,Googleなどで「Ruby インストール」と検索してインストールしてください。 番兵付きリニアサーチ・アルゴリズム(p48) では,2行目が n+1,3行目が1となっていますが,多くのプログラミング言語は配列の添字を0から数え始めますので,それぞれ,nと0に変更しています。 あと,では手続きの名前を`-'で区切っていますが,これでは引き算の意味

    数学ガール/乱択アルゴリズム - Mae向きなブログ
  • 動的計画法再入門(1) - nokunoの日記

    プログラミングコンテストチャレンジブックを読みながら、動的計画法の復習をしています。プログラミングコンテストチャレンジブックこのはコンテストの紹介とか環境構築の説明はほとんどなく、普通にアルゴリズムの教科書として優れているのでタイトルに騙されないようにしましょう(笑)。それはさておき、この記事ではp.52のナップサック問題を例に、動的計画法の考え方と実装方法について検討してみます。 ナップサック問題重さと価値がそれぞれw_i, v_iであるようなn個の品物があります。これらの品物から、重さの総和がWを超えないように選んだ時の、価値の総和の最大値を求めなさい。制約:1 1 1 <例>入力:n = 4(w, v) = {(2,3), (1,2), (3,4), (2,2)}出力:7 (0,1,3番の品物を選ぶ) 方法1最初に書いたコードがこれです。再帰による全探索で、荷物を左から順番に選んで

  • Rubyでソート・アルゴリズムを表現しよう! - hp12c

    ブログを下記に移転しました。デザイン変更により移転先では記事が一層読みやすくなっていますので、よろしければ移動をお願い致します。 Rubyでソート・アルゴリズムを表現しよう! : melborne.github.com - アルゴリズムとその実装には往々にして乖離があります アルゴリズムが理解できてもその実装が複雑で 理解に苦しむ ということが少なくありません 原因の1つはプログラミング言語の記述力にあると思います Rubyは極めて記述力が高い言語です 人間の意志をコードで表現する上での制約が極めて少ないのです これが動く疑似コードと言われる所以です ソート・アルゴリズムは配列によるデータ構造を操作します RubyのArrayクラスは強力だから Rubyの記述力を証明するいい題材になります 早速 挿入ソート 選択ソート バブルソート クイックソート マージソートをRubyで表現してみましょ

    Rubyでソート・アルゴリズムを表現しよう! - hp12c
  • 巡回セールスマン問題 - Wikipedia

    巡回セールスマン問題を総当たりで解く場合のイメージ。左側で一つずつ探していき、より効率のいいルートが見つかった場合、右側のグラフが更新される。 巡回セールスマン問題(じゅんかいセールスマンもんだい、英: traveling salesman problem、TSP)は、都市の集合と各2都市間の移動コスト(たとえば距離)が与えられたとき、全ての都市をちょうど一度ずつ巡り出発地に戻る巡回路のうちで総移動コストが最小のものを求める(セールスマンが所定の複数の都市を1回だけ巡回する場合の最短経路を求める)組合せ最適化問題である。 詳細[編集] 問題例の大きさは、都市の数で表される。この問題は、計算複雑性理論においてNP困難と呼ばれる問題のクラスに属する。すなわち、問題例の大きさに関する決定性の多項式時間アルゴリズムが見つかりそうにない、計算量的に困難な問題である。なお、この問題の特殊ケースとして考

    巡回セールスマン問題 - Wikipedia
  • http://blog.as-is.net/2008/02/3.html

  • Rubyで最短経路を探索しよう! - hp12c

    人生を書き換える者すらいた。: 人材獲得作戦・4 試験問題ほか 次に同じ質問がきたときに 「1時間いらないっしょ、こんなの」 と是非ともほざくために 今から勉強します ダイクストラ法による最短経路探索 図におけるS点からG点に到達するための最短経路を求めたい 各ノードを結ぶエッジを糸としてS点をゆっくりと持ち上げた場合 緊張する糸が変移しながら最終的にS−B−D−Gを結ぶ糸が緊張して これが最短経路と分かる*1 計算機上でこの現象をシミュレートしたものを ダイクストラ法というらしい 今各ノードとそこから伸びるエッジの情報(コストと接続先)を渡して その最短経路および総コストを出力するプログラムを考えてみよう data = { :s => [[5, :a], [4, :b], [2, :c]], :a => [[5, :s], [2, :b], [6, :g]], :b => [[4, :s

    Rubyで最短経路を探索しよう! - hp12c
  • 正規表現で素数判定 - NO!と言えるようになりたい

    追記:ハッキリ言ってこの正規表現はネタなので,実際に素数判定を行いたい場合は,もっと別な賢いアルゴリズムを使ったほうが良いです 正規表現で素数が判定できるという記事を見たので試してみた. http://www.noulakaz.net/weblog/2007/03/18/a-regular-expression-to-check-for-prime-numbers/ この記事によると /^1?$|^(11+?)\1+$/ という正規表現を使うと,素数判定が出来るらしい.ある整数 n が素数かどうか判定したい場合は,"1" * nという文字列がこの正規表現にマッチするかどうかを調べればよく,マッチすれば非素数,マッチしなければ素数となる.ただし,"1" * n は,例えば,n が 4 ならば "1111" と 1 が 4 回連続して続く文字列となる. Rubyで書いた素数判定プログラムはこん

    正規表現で素数判定 - NO!と言えるようになりたい
  • perl - 配列の∪と∩ : 404 Blog Not Found

    2010年05月01日13:15 カテゴリLightweight Languages perl - 配列の∪と∩ これを解くためには、配列の∩(交わり、intersection)がわかればいいのですが… Perl Cookbook (English) Christiansen / Torkington [邦訳: Perlクックブック] perlPHPで解決したいです。 複数(最大200程度)の配列があり、 それぞれ有している数字(それぞれ最大50程度)のうち、 二つ以上の値が同じ配列名を抜き出す。 という事をし.. - 人力検索はてな複数(最大200程度)の配列があり、 それぞれ有している数字(それぞれ最大50程度)のうち、 二つ以上の値が同じ配列名を抜き出す。 実にエレガントな方法が、Perl Cookbookに載っています。 以下、実例。 #!/usr/bin/perl use st

    perl - 配列の∪と∩ : 404 Blog Not Found
  • トップクラスだけが知る「このアルゴリズムがすごい」――「探索」基礎最速マスター

    トップクラスだけが知る「このアルゴリズムがすごい」――「探索」基礎最速マスター:最強最速アルゴリズマー養成講座(1/4 ページ) プログラミングにおける重要な概念である「探索」を最速でマスターするために、今回は少し応用となる探索手法などを紹介しながら、その実践力を育成します。問題をグラフとして表現し、効率よく探索する方法をぜひ日常に生かしてみましょう。 まだまだ活用可能な探索 前回の「知れば天国、知らねば地獄――『探索』虎の巻」で、「探索」という概念の基礎について紹介しました。すでに探索についてよく理解している方には物足りなかったかと思いますが、「問題をグラフとしてうまく表現し、そのグラフを効率よく探索する」というアルゴリズマー的な思考法がまだ身についていなかった方には、得るものもあったのではないでしょうか。 前回は、「幅優先探索」と「深さ優先探索」という、比較的単純なものを紹介しましたが

    トップクラスだけが知る「このアルゴリズムがすごい」――「探索」基礎最速マスター
  • 経路探索アルゴリズムの「ダイクストラ法」と「A*」をビジュアライズしてみた - てっく煮ブログ

    as詳解 ActionScript 3.0アニメーション ―衝突判定・AI・3DからピクセルシェーダまでFlash上級テクニック を読んでいて、経路探索のアルゴリズムで A* が取り上げられていました。A* については、いろいろ検索して調べたりもしたのですが、やっぱりに書いてあると理解しやすいですね。せっかくなので自分流に実装してビジュアライズしてみました。ダイクストラ法まずは A* の特別なケースでもあるダイクストラ法から見ていきます。クリックすると探索のシミュレーションが開始します。スタート地点(S)からゴール(G)への探索が始まります。色がついたところが「最短経路が決定した場所」です。スタート地点から少しずつ探索が完了していきます。半分ぐらい完了しました。まだまだ進みます。最後まで終わりました。最短経路を黒色矢印で表示しています。ダイクストラ法は、スタート地点から近いノード(=マス

    threeMonths
    threeMonths 2010/01/26
    おもしろい
  • 知れば天国、知らねば地獄――「探索」虎の巻

    いよいよ今回から、具体的なアルゴリズムの紹介に入っていきます。今回は、プログラミングにおける重要な概念である「探索」について考えます。グラフに変換し、探索する、という流れを知るとともに、そのグラフを効率よく探索する方法について紹介します。 今後紹介していくアルゴリズムについて お待たせしました! 「最強最速アルゴリズマー養成講座」という連載タイトルのとおり、今回の連載からいよいよ具体的なアルゴリズムの紹介に入っていきたいと思います。 しかし、それを読んでいただく前に、1つ注意してもらいたいことがあります。連載第3回でもお伝えしたように、「問題を、既存の適当なアルゴリズムに当てはめる」という考え方は、非常に危険である、ということです。 筆者の経験上、TopCoderでRedCoder以上を目指すのであれば、回答時間短縮のために、いままでのパターンを利用するのも方法の1つなのですが、連載では

    知れば天国、知らねば地獄――「探索」虎の巻
  • ダイクストラとかA*とか - #3(2010-01-19)

    ■ ダイクストラとかA*とか 単純な迷路の最短経路を見つけるのに、ダイクストラ法とA*だとどのように異なってくるのかわかりやすく見てみたかったので、JavaScriptで実装してみました。 迷路 セルをクリックするとそのセルを通過できなくなります。もう一回クリックすると元に戻ります。スタートやゴールの位置を変更するには、[Set start]や[Set goal]ボタンをクリックしてからセルをクリックします。[Run]をクリックすると経路を探します。 探す過程で、現在のセルの状態とパスの長さを表示するようにしてあって、一ステップずつゆっくり進むようになっています。 一番上はダイクストラ法、二番目がA*で、三番目はA*なのですがヒューリスティックに指定されたゴールまでの距離が等しい場合にはゴールに近いセルから試行するようにしてあります。ちなみに、A*でのセルからゴールまでのヒューリスティック

  • はてなブログ | 無料ブログを作成しよう

    引越し遍歴パートⅡ 2018年に「上京して10年で引越しを6回した」というブログを書いた。 月日は流れ、あれから6年…さらに2回の引越しをした。ホテル暮らしも含めると3回かもしれない。 前回の記事では主に神奈川〜千葉〜東京の引越し事情を書いた。関東の浅瀬でちゃぷちゃぷ遊んでいたに過…

    はてなブログ | 無料ブログを作成しよう
  • 人材獲得作戦・4 試験問題ほか - 人生を書き換える者すらいた。

    さて試験問題です。 内容は、壁とスペースで構成された迷路が与えられたとき、スタート地点からゴール地点に至る最短経路を求めよ、というものです。 たとえば、S:スタート G:ゴール *:壁 $:解答の経路 としたとき、 ************************** *S* * * * * * * ************* * * * * ************ * * * * ************** *********** * * ** *********************** * * G * * * *********** * * * * ******* * * * * * ************************** という入力に対し、 ************************** *S* * $$$ * *$* *$$*$ ************

    人材獲得作戦・4 試験問題ほか - 人生を書き換える者すらいた。