タグ

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

  • へ、変態っ!!読めないからやめてっ!bit使ったデータ構造・アルゴリズム実装集 - Negative/Positive Thinking

    この記事はCompetitive Programming Advent Calendar Div2012の2日目の記事です。 12月20日追記: Darseinさんが20日目の記事で、ビット演算についての詳しい説明を紹介してくださっています!必読ですね!!!!:) はじめに Y^´       ∨// /,∠ ,. ' /l/// /, ' , '/ ! | l }´     〈 〉    変  〈/ , ' // ̄`>< /// /// _,.=‐|'"´l l〈  変  / 〈    態.   ∨, '/l|   ,.'-‐、`//`7/  /''"´__ | ハ l丿  態   { 人)   ! !   (/!  |ヽ〈_ ・.ノ〃  〃 /  '/⌒ヾ.! ,' !く   ! !  (_ ト、__/   ヽ、_,.イ    /l l |:::::::```/:::::/...´..

    へ、変態っ!!読めないからやめてっ!bit使ったデータ構造・アルゴリズム実装集 - Negative/Positive Thinking
  • スーパーマリオブラザーズを学習させてみた(1-1)

    遺伝的アルゴリズムを使ってスーパーマリオブラザーズをコンピュータに学習させて見ました。研究室の夏休みの自由研究で作ったものです。グラディウス編:sm19443458

    スーパーマリオブラザーズを学習させてみた(1-1)
  • algorithm - JPEGminiの仕組みを推理する : 404 Blog Not Found

    2012年01月23日19:30 カテゴリアルゴリズム百選iTech algorithm - JPEGminiの仕組みを推理する なぜコンピュータの画像は リアルに見えるのか 梅津信幸 JPEGの仕組みをおぼろげに知っている人ほど、むしろこれみて「ありえない」と思ったのではないのでしょうか。 JPEGmini - Your Photos on a Diet! でもよーく考えてみると、これでいけるという方法を発見というか再発見したので。 なぜJPEGminiがありえなさそうに見えるかは、以下に集約されます。 「なぜコンピュータの画像はリアルに見えるのか」 P.131 たとえば「ここは文字」「ここは背景の空」などと、ユーザーが自由に品質を設定できれば、さらによい画像になるはずです(できれば、それもコンピュータが自動で決めてくれるとうれしいのですが)。 同書も指摘しているように、JPEG 200

    algorithm - JPEGminiの仕組みを推理する : 404 Blog Not Found
  • algorithm - 基数木 + 平衡二分探索木 = 三分探索木 : 404 Blog Not Found

    2012年01月22日16:36 カテゴリアルゴリズム百選翻訳/紹介 algorithm - 基数木 + 平衡二分探索木 = 三分探索木 珠玉のプログラミング Jon Bentley /小林健一郎訳 最有力候補は、これかも。 Ternary search tree - Wikipedia, the free encyclopedia 三分探索木 - Wikipedia 404 Blog Not Found:algorithm - Patricia Trie (Radix Trie) を JavaScript で最近のTrie研究の傾向は、要素の動的変更が自在にできる一般向けのものではなく、一旦作成したら要素の追加と削除が困難な代わりにものすごくコンパクトになる、簡潔データ構造の応用手段の方に偏っていると素人目に感じるのですが、そろそろJudyたんのごとくハッシュテーブルとガチで闘うとか、逆

    algorithm - 基数木 + 平衡二分探索木 = 三分探索木 : 404 Blog Not Found
  • 404 Blog Not Found:アルゴリズム百選 - ハッシュを再発明する

    2007年12月03日11:15 カテゴリアルゴリズム百選 アルゴリズム百選 - ハッシュを再発明する (実はハッシュを使って)配列を再発明したところで、今度は配列を使ってハッシュを再発明してみます。 現代におけるプログラミングでは、連想配列(associative array)というものを非常によく使います。通常の配列では、データを取り出すのに整数の番号を使いますが、連想配列ではその代わりに文字列を使います。これは非常に便利で、多くの言語ではオブジェクトの実装にこの連想配列を用いています。JavaScriptのオブジェクトも実は連想配列です。 しかし、これを実装するには、少し工夫が必要です。単なる配列であれば、ただ等間隔に並べておけば、「何番目を出してくれ」で事足りますが、連想配列で「'dankogai'番目」といっても人間にもコンピューターにもなんのことかさっぱりわかりません。 誰でも

    404 Blog Not Found:アルゴリズム百選 - ハッシュを再発明する
  • Algorithm - Suffix Array を JavaScript で再発明してみた : 404 Blog Not Found

    2012年01月16日16:30 カテゴリアルゴリズム百選Lightweight Languages Algorithm - Suffix Array を JavaScript で再発明してみた WEB+DB 総集編 [Vol. 1〜60] もう10年以上前に某社のCTOだったころ、Suffix array(接尾辞配列)の解説を毎週の技術者ミーティングでしたら一名を除いて「ハァ?」状態だったことを思い出しつつ。 Suffix Arrayは何が画期的だったのか? 以下は、計算機科学者でなくても直感的に理解できると思います。 ソートされていない通常のデータの中にあるサブデータ(キー)を検索しようとすると、データの大きさに比例した時間(O(n))がかかる。 ソート済みのデータであれば、二分探索でデータの大きさの対数時間(O(logn))でキーを検索できる。 さらにキーからIDを定数時間で作成でき

    Algorithm - Suffix Array を JavaScript で再発明してみた : 404 Blog Not Found
  • algorithm - bucket sort - 比較しなければソートは相当速い : 404 Blog Not Found

    2012年01月11日07:00 カテゴリアルゴリズム百選Math algorithm - bucket sort - 比較しなければソートは相当速い 珠玉のプログラミング Jon Bentley / 小林健一郎訳 絶賛風邪こじらせ中につきコードと戯れることに。 新ソートアルゴリズム「配列挿入ソート」だ! - hp12c その名も「配列挿入ソート」! すでに突っ込み入ってるけど、それ、もしかしたら人類最古のアルゴリズムだから。 最古にして最速? おそらくプログラムを組んだことがない人でも「誰にも教えられずに」知った「天然の」アルゴリズムの筆頭に来るのがこのバケットソートではないでしょうか。 ソートしたいものに適当に番号を振っておく 番号がついたバケツを用意する ソートしたいものの番号がついたバケツにそれを放り込む 必要があればバケツの中身を同じやり方でソートする 番号順にバケツの中身をぶち

    algorithm - bucket sort - 比較しなければソートは相当速い : 404 Blog Not Found
  • 素数列挙について - MugiCha

    Competitive Programming Advent Calendar 3日目は、数学っぽい話をしたいと思います。 N以下の素数をすべて求めよ。 N以下の素数の個数を求めよ。 A以上B以下の素数の個数を求めよ。 こんな感じの問題を見たことがあると思います。また問題としてでなくても、解く過程にこのようなサブ問題を解かなければいけない場合もよくあると思います。素数については説明しなくてもいいですよね? このような問題を素数列挙と呼ぶことにします。素数列挙ができれば、大きい数の素数判定や素因数分解をめっちゃ高速化したり、トーティエント関数、メビウス関数等、数学系のいろんな関数を求めたりできます。最近のもので素数列挙がほぼ必須のものだと Codeforces Beta Round #86 (Div. 1 Only) C. Double Happiness ICPC 国内予選 2011 A

    素数列挙について - MugiCha
  • 頻出典型アルゴリズムの演習問題としてよさげなやつ - 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

  • 凄いバカなプログラム - とっくりばー

    最近算数ばっかりですねこのブログ。だって面白いんだもの。 きしだのはてな「凄いバカなプログラムを作ろう」 こないださくらいさんと「バブルソートってたぶん再帰でできるよね」とかって話してたのですが、僕は今回、従来のソートアルゴリズムを越える画期的なアルゴリズムを考案しました。 名付けて「ショットガンソート」です。アメフトのショットガンフォーメーションをちょっとイメージしてます。 ショットガンソートのメリット 計算量がたぶんO(1)。うわどうしようなんか賞とかもらっちゃったら! 追記。計算「量」は確かに要素数に比例なのでO(n)でした。で、計算「時間」が要素数によらないからO(1)?計算量と計算時間のオーダーが違うところがバカアルゴリズム? ささいな問題点 ソートする数の大きさにより時間がかかることがある。でも時間がかかっている間はCPU資源を全く消費しないため、きっと他のプログラムを走らせら

  • 常識を覆すソートアルゴリズム!その名も"sleep sort"! - Islands in the byte stream (legacy)

    TwitterのTLで知ったのだが、少し前に海外掲示板で"sleep sort"というソートアルゴリズムが発明され、公開されたようだ。このアルゴリズムが面白かったので紹介してみる。 Genius sorting algorithm: Sleep sort 1 Name: Anonymous : 2011-01-20 12:22 諸君!オレは天才かもしれない。このソートアルゴリズムをみてくれ。こいつをどう思う? #!/bin/bash function f() { sleep "$1" echo "$1" } while [ -n "$1" ] do f "$1" & shift done wait example usage: ./sleepsort.bash 5 3 6 3 6 3 1 4 7 2 Name: Anonymous : 2011-01-20 12:27 >>1 なん…だと

    常識を覆すソートアルゴリズム!その名も"sleep sort"! - Islands in the byte stream (legacy)
    yamakaz
    yamakaz 2011/05/20
    うっはwwwこいつぁ天才だわ
  • 探索アルゴリズム:フリーセル解決プログラムにおける手順探索

    フリーセル解決手順のプログラムによる探索実行結果 フリーセル百万種類のゲーム全てに対してサンプルプログラムを実行したところ、おそらく勝てないと言われている 11982、146692、186216、455889、495505、512118、517776、781948 以外のゲームでは勝つことができました。 百万種類のゲームの中で 57148、563096 の二つはコンピュータにとって勝つのが難しい性質を持っています。非常に長い堂々巡りの手順が現れ、およそ四百万局面ぐらいの同一局面判定ができなければ勝てません。また最初の一枚をホームセルへ置くまでの手数が長いので、先読みを長くしなければ勝ち手順を見つけることができないのです。この二つのゲームに勝つために、最大手数を 8,192 (freecell.h : MAX_SEARCH_DEPTH)、同一局面判定上限を 4,194,304 局面 (mov

  • そのアルゴリズム、貪欲につき――貪欲法のススメ

    そのアルゴリズム、貪欲につき――貪欲法のススメ:最強最速アルゴリズマー養成講座(1/3 ページ) アルゴリズムの世界において、欲張りであることはときに有利に働くことがあります。今回は、貪欲法と呼ばれるアルゴリズムを紹介しながら、ハードな問題に挑戦してみましょう。このアルゴリズムが使えるかどうかの見極めができるようになれば、あなたの論理的思考力はかなりのレベルなのです。 動的計画法は当に万能なのか? 連載ではこれまで、かなりの文量を割いて動的計画法について説明してきました。動的計画法はさまざまな問題で有効な解決手段ですが、動的計画法が使えるからといって、常に動的計画法を利用することが正しい選択である、というわけではありません。この理由は簡単で、動的計画法は計算量を大幅に削減できますが、その質は、不要である要素を切り捨てることで問題全体を見渡すというアルゴリズムであるためです。 ここで問

    そのアルゴリズム、貪欲につき――貪欲法のススメ
  • 「物理法則を自力で発見」した人工知能 | WIRED VISION

    前の記事 「衛星成功に総書記は涙」:北朝鮮の核再開宣言とミサイル輸出 「物理法則を自力で発見」した人工知能 2009年4月15日 Brandon Keim Image credit: Science、サイトトップの画像はフーコーの振り子。Wikimedia Commonsより 物理学者が何百年もかけて出した答えに、コンピューター・プログラムがたった1日でたどり着いた。揺れる振り子の動きから、運動の法則を導き出したのだ。 コーネル大学の研究チームが開発したこのプログラムは、物理学や幾何学の知識を一切使わずに、自然法則を導き出すことに成功した。 この研究は、膨大な量のデータを扱う科学界にブレークスルーをもたらすものとして期待が寄せられている。 科学は今や、ペタバイト級[1ペタバイトは100万ギガバイト]のデータを扱う時代を迎えている。あまりに膨大で複雑なため、人間の頭脳では解析できないデータセ

  • おとうさん、ぼくにもYコンビネータがわかりましたよ! - 2009-04-09 - きしだのはてな

    やっと、Yコンビネータが何を意味するものなのか、どういう意義があるのかがわかりました。 名前を使わず再帰ができますよ!というだけのものじゃなかったのですね。 まずλありき 関数の話をしたいのです。 そのとき、いちいち hoge(x) = x * 2 としてhogeを・・・、とか名前をつけて話を進めるのがめんどうなので、関数を値としてあらわすと便利ということで、λという値を定義するのです。 そうすると、上のhoge関数なんかはλ(x)(x*2)などとあらわせますが、引数をあらわすのに()を使うといろいろまぎらわしいので、 λx.x*2 のように表記します。 というのがλ。 このとき、λになにかわたされたら、引数としてあらわされる部分を単純におきかえます。 (λx.x*2)y とあったら、xの部分をyでおきかえて (λx.x*2)y → y * 2 となります。λの引数部分を与えられた引数で置

    おとうさん、ぼくにもYコンビネータがわかりましたよ! - 2009-04-09 - きしだのはてな
  • クラスタリングの定番アルゴリズム「K-means法」をビジュアライズしてみた - てっく煮ブログ

    集合知プログラミング を読んでいたら、K-means 法(K平均法)の説明が出てきました。K-means 法はクラスタリングを行うための定番のアルゴリズムらしいです。存在は知っていたんだけどいまいちピンときていなかったので、動作を理解するためにサンプルを作ってみました。クリックすると1ステップずつ動かすことができます。クラスタの数や点の数を変更して、RESET を押すと好きなパラメータで試すことができます。こうやって1ステップずつ確認しながら動かしてみると、意外に単純な仕組みなのが実感できました。K-means 法とはK平均法 - Wikipedia に詳しく書いてあるけど、もうすこしザックリと書くとこんなイメージになります。各点にランダムにクラスタを割り当てるクラスタの重心を計算する。点のクラスタを、一番近い重心のクラスタに変更する変化がなければ終了。変化がある限りは 2. に戻る。これ

  • 1