タグ

algorithmとprogrammingに関するlepton9のブックマーク (242)

  • アルゴリズムとプログラミングをビジュアルで一挙に理解できる「VisuAlgo」

    アルゴリズムを理解するのにビジュアル化することは非常に有効で、プログラムをビジュアル化することで理解が進むのもまた同じ。そこで、アルゴリズム・プログラミングの理解が進むようにと、アルゴリズムを記述したプログラムコードを一挙にビジュアル化することで、アルゴリズム&プログラミングを同時に学習できる一挙両得なサービス「VisuAlgo」が公開されています。 VisuAlgo - visualising data structures and algorithms through animation https://visualgo.net/en 上記のVisuAlgoサイトで試しにソートアルゴリズムの基プログラム「バブルソート」をビジュアル化してみます。「Sorting」の「bubble」をクリック。 検索窓の下に「bubble」と表示されたのを確認したら「Sorting」の画像をクリック。

    アルゴリズムとプログラミングをビジュアルで一挙に理解できる「VisuAlgo」
  • 遅いソート - 鍋あり谷あり

    http://bugrammer.hateblo.jp/entry/2014/08/16/014212 ( バブルソートよりも非効率なソートアルゴリズムを探して ―― ストゥージソートとスローソート ) を読んで。 ちゃんと終わるけどもっと遅いソートがあるので書いてみた。 たぶん名前がついていると思うんだけど、調べてないので名称不明。 こういう奴。 def try_all_sort(s) s.permutation(s.size){ |x| return x if x.each_cons(2).all?{ |a,b| a<=b } } end typical case では bogo sort と同じオーダー。 bogo sort と違って、worst case は有限。O((N+1)!)だと思う。 で。ベンチマーク。 100要素を1000回なんて宇宙が消滅するまでに終わらないので、試した

    遅いソート - 鍋あり谷あり
  • バブルソートよりも非効率なソートアルゴリズムを探して ―― ストゥージソートとスローソート - Line 1: Error: Invalid Blog('by Esehara' )

    はじめに 恐らく、プログラマの中で配列内の要素を整列させたりするソートにお世話にならなかった人、というのは余り考えられないのではないでしょうか。しかし、とはいえ、大抵はソートを自前で実装せず、組み込み関数であったり、あるいは何らかのライブラリで済ませることが殆どだと思う。 車輪の再発明というよりも、バグとか、自分が考慮していなかった挙動などを避けるために、自前でソートを組むことは余りないのですが、とはいえ、自分なりにソートを実装して見ると、それがどういう特徴を持ったソートであるか、というのがわかりますし、また、ソートというのはいったいどういう操作で実現されるのかという洞察が深まってくるなあ、という実感があったりする。 なので、今回はあるソート二つについての話を書くのが趣旨です。 最高のアルゴリズムはある、だが最悪のアルゴリズムは何か 一口にソートといったところで、ソート自体にも銀の弾丸があ

    バブルソートよりも非効率なソートアルゴリズムを探して ―― ストゥージソートとスローソート - Line 1: Error: Invalid Blog('by Esehara' )
  • AtCoderでの勉強の仕方(コンテスト編) - chokudaiのブログ

    AtCoder (アットコーダー) 毎週アルゴリズム系のプログラミングコンテストを開催しているAtCoderですが、それを使って、どのように勉強すれば良いのか?というのは、結構困っている人がいるようです。 そこで、社長お勧めの、誰でも簡単に続けられる勉強方法を伝授します。 1、コンテストに参加する とりあえず、AtCoderで勉強をしたいなら、過去問を解くより、リアルタイムのコンテストに参加することがお勧めです。 自分ではなかなか勉強する気が起こらない・・・。という人でも、時間が決まったコンテストであれば参加できる、という人は多くいるようです。 たまに開催出来ないことがありますが、毎週土曜日、午後9時から10時半、または11時まで、コンテストが開催されています。 ある程度コンテストに慣れた人向けのAtCoder Regular Contestと、初心者~中級者向けのAtCoder Begi

    AtCoderでの勉強の仕方(コンテスト編) - chokudaiのブログ
  • Red Blob Games: Introduction to A*

    In addition to finding a shortest path, these algorithms can be used for distance maps, flow field pathfinding, connected components, map analysis, garbage collection algorithms, flow networks, and procedural map generation. There are many optimizations and specializations of these algorithms. Representing the map# The first thing to do when studying an algorithm is to understand the data. What is

    Red Blob Games: Introduction to A*
  • 迷路を幅優先探索で解く - Gushwell's C# Programming Page

  • ダンジョン生成してみよう - 株式会社BEFOOL ブログ

    こんにちは、あゆめぐです。 今回はダンジョン生成の基部分。 アルゴリズムそのまま実装したものの状態まで書きました。 はい、相変わらずjavascriptです。 どこかのタイミングでいい加減にc#にしないとな〜と思うんですがjavascriptそのままいろいろ持ってけて便利すぎるんだ〜。 ほら私が好きなActionScript3.0もenchant.jsにしてもjavascript系だからね。 ##考え方 ダンジョンマップを生成するアルゴリズムの解説 こちらの二分割を繰り返す方法の方です。 しかしながらこの実装だとアルゴリズムばればれなのでここからいろいろカスタマイズしないと。 均等に分割する方法はまだ作成していないので気が向いたときにやってみようかと思います。 他にもダンジョン生成にはいろんなアルゴリズムがあって 迷路自動生成アルゴリズム 上記サイトのような当にダンジョンというのもあり

  • プログラミング言語の基礎概念を学んでる - はこべにっき ♨

    プログラミング言語の基礎概念 (ライブラリ情報学コア・テキスト) 作者: 五十嵐淳出版社/メーカー: サイエンス社発売日: 2011/07メディア: 単行購入: 6人 クリック: 60回この商品を含むブログ (12件) を見る このを読んで学んでる。まだ半分くらいで関数の定義とかについて勉強してる。 プログラミング言語の動作を数学的に厳密に記述する方法を順番に教えてくれるという内容で、記述には導出システムが用いられてる。基的な算術式からはじまって、変数の定義や関数の定義、パターンマッチや型システムなど、様々な言語の機能を推論規則によって定義する方法を教えてくれる。与えられた規則が意味的に意図したものを表しているかの証明だけでなく、証明のやり方もくわしく説明されていて丁寧でたすかる。 おもしろいのはこののためのオンラインの演習システムというのがあって、の中で与えられた導出システムに

    プログラミング言語の基礎概念を学んでる - はこべにっき ♨
  • ノイズの話 - Pentanium Blog?

    これはレイトレ合宿2!!アドベントカレンダーの4週目の記事です。 梅雨真っ盛りでぱっとしない天気が続きますがレイの追跡の具合はいかがでしょうか。 7月に入ったとはいえアドベントカレンダーはまだまだ序盤。 後のほうにガチな人がいらっしゃるのでレイトレと関係あるのか微妙なネタでもまだ許されると信じていきます。 さて、レンダリングしているとテクスチャが欲しくなって、とりあえずチェッカーをつくってみたりします。 それに飽きてきたらノイズです。ノイズですよねッ!? もうノイズがあるだけでそれはそれはCGらしくなります。 しかも模様だけにとどまらず、バンプやディスプレイス、プロシージャルなオブジェクトと使い道もたくさんある素敵なやつです。 そんなわけでちょっとノイズでも作ってみようかと思います。 とりあえず2Dの画像をつくることにして、深いことを考えずに乱数で埋め尽くすとこんな感じになります。 flo

    ノイズの話 - Pentanium Blog?
  • 風景から歩行者を消す手軽な方法 | 配電盤

    固定したカメラで撮った動画で、画素ごとに時間について平均を取れば、(適当な速度で)動くものを消せます。Mathematicaだとこんな感じです。(参照:フリーソフトウェアを使う方法) Export["result.jpg", Image[Mean[Map[ImageData, Import["movie.mov", "ImageList"]]]]] おまけ:フレームの平均を計算していく過程(最初の5秒を30秒で) 詳細:風景から歩行者が消えていく様子(リアルタイム版) 追記:画質的には平均ではなく中央値や最頻値を使った方がいいかもしれませんが、「手軽」ではなくなります。「平均でもできるんだ」という「手軽」さの実例だと理解していただければと思います。 中央値:MeanをMedianに置き換えるだけで試せますが、計算時間・消費メモリともに増大します。平均なら約90秒で終わるこの動画(1280x

    風景から歩行者を消す手軽な方法 | 配電盤
  • メッシュ生成のプログラミングTIPS

    2次元の幾何情報取得プログラム 3角形の面積 点からなる三角形の面積は次のように表すことができる。 また、ヘロンの公式によれば、3角形の3辺の長さを、としたとき が成り立つ。 プログラミング例 double TriArea(const CVector2D& v1, const CVector2D& v2, const CVector2D& v3){ return 0.5*( (v2.x-v1.x)*(v3.y-v1.y) - (v3.x-v1.x)*(v2.y-v1.y) ); } 内接円の半径 3角形の周の長さの半分を、面積をとすると、内接円の半径は となる。 外接円の半径 三角形の面積を、3辺の長さをとすると、外接円の半径は が成り立つ。 アスペクト比 3角形のアスペクト比は、外接円の半径、内接円の半径とすると次のように定義される。 3角形の質を評価するためにアスペクト比がよく用いられ

  • もし女子大生プログラマに『アルゴリズム』を図解で教えるとしたら -

    2014年4月16日より2014年5月14日まで開催していたpaizaオンラインハッカソン(略してPOH![ポー!])Vol.2「女子大生とペアプロするだけの簡単なお仕事です!」で提出された最速コードはどのような高速化のアプローチでで生み出されたのでしょうか? POH Vol.2に登場した女子大生インターンプログラマの木野ちゃん(左のイラスト)にアルゴリズムを図解で教えるとしたら、どう教えるだろうか、という事で、今回は図解してみました。 今回は前回の最速コード発表レポート(【結果発表】女子大生プログラマの心を鷲掴みにした最強のコード8選)に引き続き、最速コードの裏側に迫ります。 ■高速化のアプローチ方法について 今回もPOH Vol.1 と同様に、POH Vol.2では計算量の改善による高速化を柱とするアプローチを想定して出題されました。基は定数倍高速化によって想定解法よりも悪い計算量の

    もし女子大生プログラマに『アルゴリズム』を図解で教えるとしたら -
  • 非同期処理の基礎

    9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...

    非同期処理の基礎
  • 遅延評価を活用して線形時間でGoogle Code Jam 2014 Round 1AのB問題を解く - tosの日記

    公式の解説で,「遅延評価を使ってもできる」と書いてくれなかったので。 注意:この記事は,Google Code Jam 2014 Round 1AのB問題 Full Binary Tree についてのネタバレを含みます。 この問題は木DPをする典型的な問題であり,公式の解説にもあるように, 木を根付き木にした後, 頂点でのスコアを,子のスコアのうち大きい方から2つを用いて計算する ことで解けます。何を根として選ぶかをすべて試すとO(N2)解法となり,すべての根の可能性について同時にDPをする*1とO(N)解法になります。だから,根の選び方によって隣接頂点のうち「親以外が子となる」ので,隣接頂点のスコアのうち大きい方から3つを保存するような構造を持つ――待ってください。 もちろん,降順ソートされたスコアのすべてを計算すると,O(N2)時間かかってしまいます。しかし,先頭3つを結果的に計算でき

    遅延評価を活用して線形時間でGoogle Code Jam 2014 Round 1AのB問題を解く - tosの日記
  • ドロネー三角形分割 | 12px.com

    ドロネー図 。2年前くらいに Strataの一連のシリーズ を見てからずっとアルゴリズムが気になってたので、ちょっと時間ができた隙に調べてjavascriptで動かしてみた。これであってるかどうかわからないし、Strataはさらにここから3Dになるので全然違うんだけど、なんとなくこういう仕組みだったのかなぁと思えるくらいにはなれたので非常に勉強になった。 非表示にしているけど後ろに敷いている画像はこんな感じです。 1 jsで画像から色を取得する方法とかも知らなかったけどやってみたら案外なんとかなったので良かった。 動かしてから、もしや・・・と思ってググったら、既にD3というライブラリで簡単に実現できる事を見つけてしまった。 Delaunay Triangulation これを使えばたったこれだけでできたみたい。

    ドロネー三角形分割 | 12px.com
  • Home

    Marktwirtschaft.at ist Ihre Quelle für Neuigkeiten, Wissenswertes und Hintergründe aus der Welt der Wirtschaft in Österreich. Unser Ziel ist es, Ihnen einen umfassenden Einblick in die Bereiche Industrie, Wirtschaft, Handwerk, Karriere, Finanzen, Digitalisierung, Agribusiness, Handel und Automotiv zu bieten.

  • プログラムの難しさの階層 - きしだのHatena

    プログラムを理解するのは、まあ難しいです。 でも、その難しさには階層があります。 よく、変数は箱だとか箱じゃないとか議論になりますが、何人か初心者に教えた感じでは、変数自体でつまづくことはあまりないので、実際はそんな例えをしなくても「変数は変数だ」で充分だったりします。 デバッガでステップ実行しながら変数の内容を見ればいい。 で、条件分岐くらいは結構つまづくことはなくて、単純な演算と条件分岐だけが必要なプログラムであればまあそれなりに書けるようです。 ぼくも、一番最初に自分の意図で作ったプログラムは input "ワカレミチガアル。ドウスル? 1:ミギ 2:ヒダリ"; a if a = 1 then print "ガケニオチテシニマシタ" else print "ライオンニカマレテシニマシタ" みたいなものでした。こういった条件分岐をたくさん並べてアドベンチャーゲームっぽいものを作った人は

    プログラムの難しさの階層 - きしだのHatena
  • 同人版 Magic: the Gathering のAIルーチンが興味深い | ず@沖縄

    Magic: the Gathering という時間と金をい尽くすゲームがある。 私が知ったのは日語第4版発売後なので1996年ごろ。REXAに改築される前のベスト電器那覇店が扱い始めたのがきっかけ。 JAVY地下の大会の決勝でカウンターポストに負けたんだよなあ。 カードゲームというジャンルが M:tG 以前と以後に分けられるほど画期的なゲームで、ポケモンカードゲーム遊戯王などの派生ゲームがワラワラ誕生したのも懐かしい記憶だ。 コンピュータ版 Magic: the Gathering沖縄には碁会所や雀荘は多く存在するのだが、マイナーゲームは対戦相手を探すのが一苦労。将棋ですら道場は少ない。まして舶来のゲーム。人間の相手は探しづらいので、コンピュータに相手をさせたくなるのは自然の成り行きだ。 さらにTCG自体が金い虫のゲームなので、コンピュータで代行できれば安上がり。私も市販のソフト

    同人版 Magic: the Gathering のAIルーチンが興味深い | ず@沖縄
  • Game Mechanic Explorer

    A collection of concrete examples for various game mechanics, algorithms, and effects. The examples are all implemented in JavaScript using the Phaser game framework, but the concepts and methods are general and can be adapted to any engine. Think of it as pseudocode. Each section contains several different examples that progress in sequence from a very basic implementation to a more advanced impl

    Game Mechanic Explorer
  • PHPで素数を数えて落ち着いてみた - hnwの日記

    2,3,5,7,11,13,...と素数を順に列挙することで落ち着く人が世の中にはいるようです(参考:「素数を数えて落ち着くんだ…」)。とはいえ人力では素数を100個列挙するのさえつらいので、プログラミング言語に頼った方が落ち着けるはずです。PHPには、そんな状況で使えそうな関数が存在します。 gmp_nextprime ― 次の素数を見つける PHP: gmp_nextprime - Manual よし、この関数さえあれば落ち着けるぞ、と思いきや、マニュアルにはこんな記述もあります。 注意: この関数は素数を識別するのに確率的アルゴリズムを使用します。 誤って合成数を取得してしまうことは、まずありません。 PHP: gmp_nextprime - Manual えっ?「まずありません」ってことは少しくらいはあるんでしょうか。逆に不安で落ち着かなくなってしまいそうです。 稿ではこの関数に

    PHPで素数を数えて落ち着いてみた - hnwの日記