タグ

programmingとAlgorithmに関するedo_m18のブックマーク (21)

  • 「プログラミングの常識」を時々見直す必要性について|Rui Ueyama

    自分の中のプログラミングの常識というものは、ときどき現実のハードウェアに合わせて調節しないといけない。ハードウェアが進歩し続けているので、コンピュータで簡単にできることと相対的に難しいことのバランスが変化し続けているからだ。ここでは特にストレージにフォーカスして書こうと思う。 昔はメモリが相対的にとても貴重な資源だったので多くのプログラマがメモリを節約することに血道を上げていた。例えばWindowsの初期の頃に設計されたデータ構造には、メモリをバイト単位ででもいいから節約したいという意図の痕跡がいまでも多く見受けられる。DRAMの次に速い記憶装置はHDDだったので、メモリが足りなくなればHDDにデータを保存せざるを得ないのだが、DRAMとHDDのランダムアクセスの速度差は、机の上のの開いているページを見るのと、そのAmazonで注文して到着するのを待つのと同じくらいのスケールで違うの

    「プログラミングの常識」を時々見直す必要性について|Rui Ueyama
  • 計算量を具体的に見てみる 2009-01-06 - きしだのはてな

    アルゴリズムの話では、計算量の解析がかかせません。 計算量はオーダー記法で表されますが、これは、データの入力量に対してどのくらい時間がかかるかをあらわしたものです。 こういった話はどのアルゴリズムのにも載ってるはずですが、具体的にどのようなプログラムを書くとそのオーダーになるかという記述はあまりありません。 ということで、やってみました。 計算時間表示のための共通処理を行うクラスは、一番最後に書いてます。 O(1) 計算時間がO(1)のアルゴリズムは、処理が入力の量によらない場合です。 配列の要素のアクセスや、ハッシュテーブルによるデータ検索、連結リストへの追加削除などがこれにあたります。 コードには入力量でのループが含まれません。 public class O1 extends ViewCompFrame{ @Override void compute(int n) { proc();

    計算量を具体的に見てみる 2009-01-06 - きしだのはてな
  • その8 4分木空間分割を最適化する!

    ホーム<ゲームつくろー!<衝突判定編 2D衝突編 その8 4分木空間分割を最適化する!(理屈編) ゲーム空間に置いたオブジェクトを総当りで衝突判定する事ははっきりと非効率だと言えます。ちょっと計算してみましょう。60FPSのゲームの1フリップ約16.6ミリ秒の内衝突判定に10%の時間余裕(1.66ミリ秒)を与えられたとします。もし1000回の衝突判定に1ミリ秒かかるなら(1000回/msec)、判定回数は1660回以下に抑えないと間に合いません。総当りだとこれは58オブジェクトくらいで限界です。判定時間が200回/msecならオブジェクトはたった18個で限界。これはどう考えても節約が無いとゲームになりません。 オブジェクトの全ての位置が決まった時、自分とぶつかる可能性があるのは自分の周りのオブジェクトだけです。遠い所にある物は判定する必要すらありません。そこで「空間をある程度制限してその中

  • その13 OBBとOBBの衝突

    ホーム<ゲームつくろー!<衝突判定編< OBBとOBBの衝突 3D衝突編 その13 OBBとOBBの衝突 衝突の丸の1つ「OBBとOBB」の衝突です。大きさの違うお互いに3次元的に回転した直方体が衝突しているかどうかを調べるというのはやはり簡単ではありませんが、これができると多種多様な方面で役に立ちます。OBB同士の衝突として主流なのは「分離軸判定」と呼ばれる方法でして、ここでもそれについて見ていきます。ちょっと深呼吸してご覧下さい(^-^; ① 「分離軸」判定とは? OBBの衝突には「分離軸」という物が登場します。これがいったい何なのか?まずは下の図をご覧下さい。 上のOBBは明らかに衝突していません。この時、両方のOBBを分ける直線が「絶対に」存在します。この直線は、ちょっと小難しい言葉で言うと分離超平面(Separating hyperplane)と呼ばれています。直線なのに平面と

  • ダイクストラ法(最短経路問題)

    ダイクストラ法 (Dijkstra's Algorithm) は最短経路問題を効率的に解くグラフ理論におけるアルゴリズムです。 スタートノードからゴールノードまでの最短距離とその経路を求めることができます。 アルゴリズム 以下のグラフを例にダイクストラのアルゴリズムを解説します。 円がノード,線がエッジで,sがスタートノード,gがゴールノードを表しています。 エッジの近くに書かれている数字はそのエッジを通るのに必要なコスト(たいてい距離または時間)です。 ここではエッジに向きが存在しない(=どちらからでも通れる)無向グラフだとして扱っていますが, ダイクストラ法の場合はそれほど無向グラフと有向グラフを区別して考える必要はありません。 ダイクストラ法はDP(動的計画法)的なアルゴリズムです。 つまり,「手近で明らかなことから順次確定していき,その確定した情報をもとにさらに遠くまで確定していく

  • ゲームAI -基礎編- 『知識表現と影響マップ』

    みなさん、こんにちは! 突然ですが…皆さんには、ひいきにしている ゲームのキャラクターはいらっしゃいますでしょうか。 手ごわいボス敵や頼れるパートナー、愛嬌のある動きをするモンスター達は 一体どのような仕組みで動いているのでしょう? 今回の記事ではそんなゲームの中のキャラクター達を 魅力的に動かす仕組み、AIについて御紹介したいと思います。 改めまして記事を担当させて頂きます、Cygamesエンジニアの佐藤です。 これまでコンシューマ機でのゲームAI開発に携わり、 ゲームならではのキャラクター表現の楽しさを追いかけてきました。 このブログを通じて、皆さんのゲームのキャラクターを より表情豊かに魅力的なものにする方法について、皆さんと一緒に考えていければ幸いです。 今回はゲームAIをデザインするにあたって重要となる、 「知識表現を定義する」というステップと、 知識表現の一つである影響マッ

    ゲームAI -基礎編- 『知識表現と影響マップ』
  • 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
    edo_m18
    edo_m18 2015/10/22
    これは面白い。色々なアルゴリズムを視覚的にアニメーション付きで示してくれる。
  • ITエンジニアなら知っておきたい、今更聞けないアルゴリズムの種類一覧 - paiza times

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

    ITエンジニアなら知っておきたい、今更聞けないアルゴリズムの種類一覧 - paiza times
  • Mac、iOSで、rand()関数の疑似乱数アルゴリズムがヘン! - Qiita

    話の発端は、StackOverflowの、この質問にあった。 StackOverflow語版 - c言語での乱数生成 質問に対する回答は、きわめて単純で、rand()関数を、取得したい乱数の個数分、呼んでやりましょうというもの。 いちおう、XcodeのCommand Line Toolで、サンプルコードを作って、それを実行してみて、ちゃんと意図したとおりの結果になることを確認する。が、ここで奇妙なことに気づく。 何度実行しても、初項が4になる。 試しに、こんなC言語のコードを書いて、Xcodeで実行してみる。 #include <stdio.h> #include <stdlib.h> #include <time.h> int main(int argc, const char * argv[]) { unsigned int i; unsigned int seed = (uns

    Mac、iOSで、rand()関数の疑似乱数アルゴリズムがヘン! - Qiita
  • 平方数かどうかを高速に判定する方法 - hnwの日記

    平方数とは、ある整数の平方(=二乗)であるような整数のことを言います。つまり、0,1,4,9,16,...が平方数ということになります。 ところで、与えられた整数が平方数かどうかを判定するにはどうすれば良いでしょうか。与えられた整数の平方根の小数点以下を切り捨て、それを二乗して元の数になるかどうか、というのがすぐ思いつく実装です。 <?php function is_square($n) { $sqrt = floor(sqrt($n)); return ($sqrt*$sqrt == $n); } しかし、平方根の計算は比較的重い処理です。もっと高速化する方法は無いのでしょうか。 多倍長整数演算ライブラリGNU MPには平方数かどうかを判定するmpz_perfect_square_p関数が存在します(PHPでもgmp_perfect_square関数として利用できます)。稿ではこの実装

    平方数かどうかを高速に判定する方法 - hnwの日記
  • 各種ゲームのプログラム解析

    目次 はじめに 解析結果についての解説 ファイナルファンタジーIV ファイナルファンタジーV ファイナルファンタジーVI ドラゴンクエストV ドラゴンクエストVI ドラゴンクエストI・II ドラゴンクエストIII ロマンシング サ・ガ2 ロマンシング サ・ガ3 技術資料 ファイナルファンタジーIV ファイナルファンタジーV ファイナルファンタジーVI ドラゴンクエストV ドラゴンクエストVI ドラゴンクエストI・II ドラゴンクエストIII ロマンシング サ・ガ2 ロマンシング サ・ガ3 今後の予定 おわりに はじめに ゲームの内部で起こっている処理を推測するのはなかなか難しいものです。ユーザーサイドから見れば、ゲームの内部処理はほとんど「ブラックボックス」のようなものです。ユーザーサイドでは「(内部で複雑な処理が行われた末の)最終結果」しかわかりませんし、ゲーム中の様々な要素(各種パラメ

  • GJK アルゴリズム 説明 - ぽんこつでばいす

    結構立ちましたが、GJKについてようやっとまとめれたのでアップしたいと思います。 同じように悩んだ方の手助けになればいいかな?って思います。 実装は簡単なんですけど、この記事用のサンプルは組んでません! ヒマが出来て組めたらアップします。 GJK アルゴリズムは凸多面体同士が重なっているかどうかを調べるアルゴリズムです。 どれだけめり込んだか?を調べるアルゴリズムは Johnson's Distance アルゴリズムっていう別のアルゴリズムになりますが、 やっていることは、非常に良く似ています。 まず、GJK アルゴリズムの前提になっている、ミンコフスキー差について解説します。 ミンコフスキー差というのは、2つの物体の差の Swept Volume になります。 要するに、物体AとBがあった時に、B を原点で反転したもの(原点対称)を物体 A の周り(表面)で 移動させたときに生じる領域の

  • ぷよぷよの作り方【Windowsプログラミング研究所】

    ぷよぷよの作り方 概要:ぷよぷよの礎となるアルゴリズムをプログラム付きで解説します。 ぷよぷよはアルゴリムが高度なためテトリスで落ちゲーの基礎を習得した方に最適です。 ★☆ 注意 ☆★ この解説は「テトリスの作り方」の差分解説になります。 ぷよぷよ独自の内容中心に解説していきますので、 動作するプログラムを組みたい場合は「テトリスの作り方」も参照して下さい。 またゲーム全体の流れ制御や各種エフェクトについても解説しません(公開しているプログラムをご覧下さい)。 ■とことんぷよぷよ(ソースファイル / 実行ファイルその他) 私が作った作品の実行画面は以下のようになります。 このプログラムには様々な機能が実装されていますが、 ここではこのプログラムからぷよぷよに最低限必要なプログラムを抜粋して アルゴリズム中心に解説していきます。 ■データ構造の復習 一定の大きさを持つマスを単位に処理します。

  • DirectX技術編

    ホーム < ゲームつくろー! < DirectX9技術編 DirectX9技術編 Direct Graphics その1 初期化なんて怖くないぜ! 2013. 1. 11 改正 サンプルプログラム その2 座標変換済み頂点で2D板ポリゴンを描画 2006. 5. 15 加筆改正 サンプルプログラム その3 テクスチャ作成あれこれ 2005. 12. 3 改正 サンプルプログラム その4 もう悩まないテクスチャブレンディング 2005. 12. 3 改正 その5 高速フォント表示 2006. 5. 12 加筆改正 サンプルプログラム その6 板ポリゴンに写る3Dオブジェクト 2005. 12. 3 改正 その7 3Dオブジェクト描画のおさらい 2006. 7. 11 加筆改正 サンプルプログラム その8 キーフレームアニメーションで動きを制御 2005. 12. 3 改正 その9 Xファイル

  • http://www.technotype.net/hugo.elias/models/m_perlin.html

  • Boidsとは

    Boid(ボイド)とは、1987年にCraig Raynoldsによって発表された理論です。 この理論は、3つのルールを規定するだけで鳥の群れをシミュレーションできるというものです。 ちなみにBoidという名の由来は、鳥もどきという意味の言葉birdoid(バードイド)が短くなりこのように呼ばれるようになりました。 さて、Boidsの3つのルールとは、以下の通りです。 Separationは、近くの鳥や物体に近づきすぎたらぶつからないように離れるルールです。 もし、ボイド同士が近づきすぎてしまったら、前を飛んでいるボイドはスピードを速くし、 後ろを飛んでいるボイドはスピードを遅くするようにします。 障害物、例えば柱とか壁とかに対しては、それにぶつからないように方向転換して衝突を避けるようにします。 Alingmentは、近くの鳥たちと飛ぶスピードや方向を合わせようとするルールです。 すなわ

  • 数学・アルゴリズム研究室

    当コーナーでは、ゲーム制作や一般アプリケーション開発といったプログラミングの「土台」となる各種アルゴリズムや初級レベル数学の基的概念を確かめるプログラムを作って試してみます。コードの中で何をしたいのか、具体的な「手順」や数学的な背景を考え、それをプログラミング言語の変数やデータ構造、制御構造などで実現していきましょう。 ただ、私自身が数学に関しては素人なので、たいしたことはできません。内容も無保証ですので、ご注意ください。 コーナーでは、Javaアプレットを使用しているページがあります。Javaアプレットが埋め込まれているページでは、プラグインがないとプログラムが実行されません。 数式処理への第一歩>足し算(1999/10/ 6) 連結リスト(1999/10/ 6) 参照(ポインタ)の繋ぎあわせでデータを保持。 16進文字列と数値の変換(2000/ 6/20) 文字列の検索(1999/

  • はてなグループの終了日を2020年1月31日(金)に決定しました - はてなの告知

    はてなグループの終了日を2020年1月31日(金)に決定しました 以下のエントリの通り、今年末を目処にはてなグループを終了予定である旨をお知らせしておりました。 2019年末を目処に、はてなグループの提供を終了する予定です - はてなグループ日記 このたび、正式に終了日を決定いたしましたので、以下の通りご確認ください。 終了日: 2020年1月31日(金) エクスポート希望申請期限:2020年1月31日(金) 終了日以降は、はてなグループの閲覧および投稿は行えません。日記のエクスポートが必要な方は以下の記事にしたがって手続きをしてください。 はてなグループに投稿された日記データのエクスポートについて - はてなグループ日記 ご利用のみなさまにはご迷惑をおかけいたしますが、どうぞよろしくお願いいたします。 2020-06-25 追記 はてなグループ日記のエクスポートデータは2020年2月28

    はてなグループの終了日を2020年1月31日(金)に決定しました - はてなの告知
  • オブジェクト指向プログラミングの教え方? | システム設計日記

    技術者仲間で話していたら、4月入社の新人に、オブジェクト指向プログラミングをどうやって教えたらよいか?、という話になった。 想定している言語は Java。 ■動物・犬・モデルの説明から ■基用語の説明から:「カプセル化とは」「継承とは」... ■サンプルコードから: System.out.println( "hello world" ) ... どのパターンでもうまくいかなかったので、今度の新人研修では何か工夫したいね、という話。 結論から言うと「これだ」というアイデアがでたわけではないが、話の内容は、いろいろ興味深かったのでメモ書き。 Java はオブジェクト指向の言語なの? Java は、ある意味 C言語の仲間。ある側面はほとんど同じ言語。 ・int, long (プリミティブなデータ型) ・配列操作 ・if/for/return ここだけ見れば、C言語のまま。つまり命令型、手続き

  • 3年D組モチヲ先生

    ▽ 3年D組モチヲ先生 〜宿題〜 今日できなかった者は宿題だー。来週までにやってこいよー、テストにでるゾー。 teacher.exe / 100.441 Bytes / version 2002.09.05 ▽ ゲーム3分クッキング さらに、ゲームアルゴリズムの通信教育を受けたい人はこちら。 授業内容はかなり『濃い』です。 自宅学習を希望する人のために、ダウンロード版もあります。こちらは、現在キャンペーン中につき、 ダウンロードしてくれたお友達すべてに、もれなく RTGチェッカー機ついてきます。 cooking.exe / 158.692 Bytes / version 2002.02.07 ▽ モチヲの釣りコーナー 釣り。それは鮒に始まり、鮒に終わる・・・ 3年D組林間学校へ!!