タグ

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

  • 深さ優先探索と幅優先探索の簡単な実装方法 - 働かないプログラマのメモ帳

    深さ優先探索と幅優先探索は、実は簡単に実装することができます。 次のインターフェースを実装したクラスで例を見ていきます。 interface Node { public String getName(); public List<Node> getChildren(); } 深さ優先探索 深さ優先探索は以下の手順で実装できます。 スタックを用意する スタックに最初の要素を入れる(push) スタックから要素を取り出す(pop) 要素に対して処理をする 要素の子供をスタックに入れる(push) スタックがカラになるまで3〜5を繰り返す rootNodeから深さ優先探索でnameを出力するプログラムは次のようになります。 Deque<Node> stack = ArrayDeque<Node>(); stack.push(rootNode); while(!stack.isEmpty()) {

    深さ優先探索と幅優先探索の簡単な実装方法 - 働かないプログラマのメモ帳
  • tree traversal

    木の全てのノードを1回ずつ取り上げる処理を、全ノードの数え上げ enumeration とか 木の走査 traversal あるいは walk といいます。 全部のノードのデータを順に1回ずつ処理することです。深さ優先と幅優先があります。 深さ優先 depth-first 右図のように、 根から葉に向かって順にすすみ、葉に届いたら親に戻って隣の子へ、 終わったら、親、その親と戻りその子へとたどります。 各ノードは、下に下りる時、隣の子に行く時、上に戻る時の計3回通るのですが、 いつそのノードのデータを処理するかで次の3種があります。 行きがけ順 pre-order

  • 漸近計算量理論

    当サイトの一部ページには、アフィリエイト・アドセンス・アソシエイト・プロモーション広告を掲載しています。 Amazonのアソシエイトとして、Security Akademeiaは適格販売により収入を得ています。 広告配信等の詳細については、プライバシーポリシーページに掲載しています。 消費者庁が、2023年10月1日から施行する景品表示法の規制対象(通称:ステマ規制)にならないよう、配慮して記事を作成しています。もし問題の表現がありましたら、問い合わせページよりご連絡ください。 参考:令和5年10月1日からステルスマーケティングは景品表示法違反となります。 | 消費者庁 毎月8日はメルカードの日Amazonファーマシー3日はau PAY ありがとうギフト、がんばったボーナスの付与日ソースネクストの創立感謝フェアdポイント増量キャンペーン2024SummerキャンペーンAEON Pay現金チ

    漸近計算量理論
  • アルゴリズムと計算量

    金庫破りと計算量膨張 n 桁の番号をもつ暗証ロックがあるとします。 2 桁であれば 00 〜 99 の 100 個の正解があるわけで、 0 番から順に入力していく解き方では、 最悪の場合は 100 手目に開きます。 99 が正解とは限らないので、平均的にはこれより早く解き終わります。 0 であるときの確率は 1/100 で、このときの手数は 1 手です。 1 であるときの確率は 1/100 で、このときの手数は 2 手です。 2 であるときの確率は 1/100 で、このときの手数は 3 手です。 3 であるときの確率は 1/100 で、このときの手数は 4 手です。 : 99 であるときの確率は 1/100 で、このときの手数は 100 手です。 つまり、平均手数は により、100 手目の約半分です。 ここでいう解き方をアルゴリズムといい、 問題を解くための手数 (てかず) のことを計算

  • Nettica VPN Service » Make Your Own Cloud

    kanno_kanno
    kanno_kanno 2013/06/10
    珠玉のプログラミングのソース配布場所
  • Big-O Algorithm Complexity Cheat Sheet (Know Thy Complexities!) @ericdrowell

    Hi there!  This webpage covers the space and time Big-O complexities of common algorithms used in Computer Science.  When preparing for technical interviews in the past, I found myself spending hours crawling the internet putting together the best, average, and worst case complexities for search and sorting algorithms so that I wouldn't be stumped when asked about them.  Over the last few years, I

    kanno_kanno
    kanno_kanno 2013/05/08
    アルゴリズムの計算量(O記法)チートシート
  • RDBMSで使われるB木を学ぼう (1/3)- @IT

    第5回 RDBMSで使われるB木を学ぼう はやしつとむ アナハイムテクノロジー株式会社 2009/6/22 オブジェクト指向によって、アルゴリズムは隠ぺいされていることが多くなった。しかし、「用意されていない処理」が求められたときに対応できるだろうか(編集部) 第3回「AVL木で木構造を学ぼう」、第4回「もっとAVL木で木構造を学ぼう」と2回連続でAVL木について解説しました。 今回はAの後だからBというわけではありませんが、B木(B-Tree)を取り上げます。 B木の変種であるB+木やB*木は、OracleやPostgreSQL、Firebirdなどのリレーショナルデータベースでインデックスとして利用されている、メジャーな木構造です。 筆者はDelphi 2009でサンプルプログラムを作成していますが、Delphiをお持ちでない方は下記のURLからTurboDelphiをダウンロードして

  • なぜBTreeがIndexに使われているのか - maru source

    ※この内容は個人的な考察なので、間違っている箇所もあると思います。そういう部分を見つけた際はぜひ教えて下さい。 RDBMSの検索を早くするためにIndexって使いますよね。例えばこんなテーブル CREATE TABLE user ( id INT UNSIGNED NOT NULL, name VARCHAR(255) NOT NULL, UNIQUE INDEX (id) ); idカラムにIndexを張っています。これはidでの検索を高速にするためです。ここでidカラムにIndexが貼っていない場合と比べると検索時間が大幅に変わってきてしまいます(特にレコードが多くなった時) ではなぜIndexを貼ると検索が早くなるんでしょう?? Indexとはその名の通り索引を意味します。特定のカラムの索引を作成しておくことで検索を高速化します。 (の最後によみがな順で単語が並べられたりしています

    なぜBTreeがIndexに使われているのか - maru source
  • B木 - naoyaのはてなダイアリー

    昨年から続いているアルゴリズムイントロダクション輪講も、早いもので次は18章です。18章のテーマはB木(B Tree, Bツリー) です。B木はマルチウェイ平衡木(多分木による平衡木)で、データベースやファイルシステムなどでも良く使われる重要なデータ構造です。B木は一つの木の頂点にぶら下がる枝の数の下限と上限を設けた上、常に平衡木であることを制約としたデータ構造になります。 輪講の予習がてら、B木を Python で実装してみました。ソースコードを最後に掲載します。以下は B木に関する考察です。 B木がなぜ重要なのか B木が重要なのは、B木(の変種であるB+木*1など)が二次記憶装置上で効率良く操作できるように設計されたデータ構造だからです。データベースを利用するウェブアプリケーションなど、二次記憶(ハードディスク)上の大量のデータを扱うソフトウェアを運用した経験がある方なら、いかにディ

    B木 - naoyaのはてなダイアリー
  • Algorithms with Python

    サービス終了のお知らせ いつもYahoo! JAPANのサービスをご利用いただき誠にありがとうございます。 お客様がアクセスされたサービスは日までにサービスを終了いたしました。 今後ともYahoo! JAPANのサービスをご愛顧くださいますよう、よろしくお願いいたします。

  • 手続き脳によるHaskell -- Sorting Algorithms

    このページは手続き脳から脱却でいない筆者が、Haskell による各種 ソートティングアルゴリズムを実装してみた結果を紹介するページです。ソート はアルゴリズムの基ですから、これで Haskell を攻略しようというわけ です。 ところで、Haskell に関するWebページを巡回していると、高階関数やモナド などを複雑に使ったアクロバチックでアブノーマルなコードに出会うことが しばしばあります。書いている超頭の良い人達は自らの変態さ加減が披露出来て 快感なのかもしれませんが、頭の悪い私にはそんなコードは理解できません... orz。 そこで私のページでは次のスローガンでプログラミングを行います 普通にやれ、普通に! そんなわけで「モナドを理解したい」とか常人には不可能な無理難題を期待 している人は他のページを当たってください。筆者自身が分かってないので解説 できません。ごめんなさい。

  • エラトステネスの篩 in Java - 似非学問的な手記

    「落ちつけ!素数を数えるんだ!」 というセリフが思い浮かんだのは俺だけでいい。 あれって元ネタは何なんだろう。 Wikipedia「エラトステネスの篩」 http://ja.wikipedia.org/wiki/%E3%82%A8%E3%83%A9%E3%83%88%E3%82%B9%E3%83%86%E3%83%8D%E3%82%B9%E3%81%AE%E7%AF%A9 おそらく最古のアルゴリズムなのでは?と思う。 別に歴史を詳しく知ってるわけじゃないし、なんの裏付けも用意してないけど。 さて、この「篩」のコードは、確かC++の勉強をしているときに練習で書いたような気がする。このブログ始めるよりずっと前のことだけど。 その時は効率のいい実装を自分で調べて書いたんですが、今回そのソースのページが見つからんかった。 おぼろげな記憶を頼りに書いたのが次のコード。 1.1〜nまでのビットフラグを

    エラトステネスの篩 in Java - 似非学問的な手記
  • 「1000のアルゴリズムを持つ男」vs.「やわらか頭脳」

    「1000のアルゴリズムを持つ男」vs.「やわらか頭脳」:最強最速アルゴリズマー養成講座(1/3 ページ) 典型的なアルゴリズムをたくさん知っている人間が最強か――? いいえ、典型的なアルゴリズムを知らなくても、違ったアプローチで答えに迫る方法はいくらでも存在します。短い実行時間で正確な答えを導き出せるかを考える習慣をつけましょう。 アルゴリズマー養成講座と銘打ってスタートした連載。もしかすると読者の方の興味は、はやりのアルゴリズムや汎用的なアルゴリズムを知ることにあるのかもしれません。しかし、今回は、いわゆる「典型的なアルゴリズム」を用いずに進めていきたいと思います。 なぜ典型的なアルゴリズムを用いないのか。それは、典型的なアルゴリズムばかりを先に覚え、それだけでTopCoderなどを戦っていこうとした場合、それに少しでもそぐわない問題が出た場合に、まったく太刀打ちできなくなってしまう

    「1000のアルゴリズムを持つ男」vs.「やわらか頭脳」
    kanno_kanno
    kanno_kanno 2012/08/19
    アルゴリズムは発想が大事で、発想は経験から導き出され、経験に結びつかない知識は身につかない。とのこと
  • 博士の異常なアルゴリズム、または私は如何にして心配するのを止めて線形探索を愛するようになったか : 404 Blog Not Found

    2012年02月10日13:00 カテゴリアルゴリズム百選アマグラマーのすすめ 博士の異常なアルゴリズム、または私は如何にして心配するのを止めて線形探索を愛するようになったか これはちょっとプログラマーといふ生物を買いかぶりすぎてると思います。 プログラマへの誤解 | pineapple blog プログラムを書かない人がプログラムを読んだときにする良くある間違いは,ああこんなプログラムなら自分にも書けそうだと思うことだ.プログラムは何百万とある可能性からたったひとつ(は言い過ぎにしてもわずかながら)の正しい方法を残したものであり,この捨てる能力こそがプログラマの実力だから. 少なくとも、プロ2グラマーの場合は。 その反証としてあげたいのが、線型探索(linear search)。漢字で書いたり英語で書いたりするとさぞ凝ったことをやってるように見えるけど、実は「見つかるまで頭から(あるいは

    博士の異常なアルゴリズム、または私は如何にして心配するのを止めて線形探索を愛するようになったか : 404 Blog Not Found
  • Project Euler - PukiWiki

    Project Euler † プログラムで解く数学の問題集です。 公式サイト 適当に和訳してます。我こそはと思う人はライセンスを確認した上で自由に書いてください。 ↑

  • 1