タグ

ProgrammingとAlgorithmに関するmoo_sanのブックマーク (5)

  • スレッドプールの作り方

    (*)が付いている材料は、コア数分用意できると性能がアップします。 シンプルなProducer-Consumerパターン スレッドを1だけ使うパターンから紹介します。特に小細工する必要も無いので実装もシンプルになります。 メインスレッドから非同期に実行して欲しい処理をワーカースレッドのキューに積む ワーカースレッドはキューから処理を取り出して実行する 生産者(Producer)・消費者(Consumer)パターンと呼ばれる、非常に古典的なデザインパターンの1つです。 コードにするならこんな感じ。 #include <condition_variable> #include <deque> #include <functional> #include <mutex> #include <thread> class worker { public: worker() : thread_([t

    スレッドプールの作り方
  • グラフ理論って何に使うのさ(ゲーム開発編)

    まえがき 今月二回目のアドカレ記事になります。二目のテーマは、グラフ理論のアルゴリズムの具体的な活用例です。 想定している対象読者は、ゲーム開発に興味がある人等です。あまり難しい話ではありませんので、気軽に読んでいただければと思います。 君はMinecraftを知っているか この世にはMinecraftというゲームがあります。まあ、多くの方は既にご存知かと思うのですが。 このゲームはいわゆるサンドボックスというカテゴリのもので、たくさんのブロックを最小単位として構成された世界で自由に遊ぶことができます。 立方体の形状でないブロックもある ブロックを積んでもよし、壊してもよし。あるいはPvPだけをひたすらに極めても良いし、クリエイティブモードで建築だけをしてもいい世界ですが、今回はゲームプレイに関する内容というよりMinecraftの中身の話をしようと思います。 今回のトピック さて、Mi

    グラフ理論って何に使うのさ(ゲーム開発編)
  • 並べ替えできるデータをデータベースに保存する方法

    システム開発を行っているとよく、クライアントからデータを任意の順番に並び替えたいという要望があります。並び替えを実行するプログラムは、配列の順序を変えるだけなので簡単ですが、その順序をデータベースにどうやって保存するかという点についてはいつも迷ってしまいます。 これには色々なやり方がありますので、まとめてみました。 8つの方法 今回は8つの方法に分けてみましたが、いくつかの方法は組み合わせて使えると思いますし、さらに工夫した方法もあると思います。方法1~6は大きなくくりとしてよく見かけるものです。方法7方法8は私が考えたもので見たことがないし私自身も実装したことが無いのですが、飛躍したアイデアでもないので載せました。 対象のデータベースは主にRDBですが、KVSに向いているかどうかも(良い・普通・悪い)の3段階で書いています。 データ構造と使い方の説明は書いていますが、具体的な実装は書いて

    並べ替えできるデータをデータベースに保存する方法
  • 乱数について本気出して考えてみる|TechRacho by BPS株式会社

    プログラミングをやっていると、様々な乱数に出会います。乱数に関しては大勢の研究者が色々な研究結果を出しているため、種類も増え、いったいどれを使えばいいのかと悩む原因にもなります。 大勢が研究し利用している分野ですから、私以外でも大勢が乱数に関する記事を書いているため、あえて新しい記事を書く価値は高くないかもしれません。まあ、既に理解している人はここで記事を閉じるか、暇つぶし程度の感覚で読んでいただくと良いかと思います。 真乱数と疑似乱数 プログラミングの世界の中でいわゆる "乱数" として扱われることが多いのは擬似乱数です。疑似、と付くからには、これは実のところ乱数ではないと言えます。とは言え、擬似乱数を乱数でないと言ってしまうと話が終わってしまうので、疑似乱数を含む乱数を広義の乱数とします。この記事で扱うのは広義の乱数です。逆に、狭義の乱数、物の乱数は真乱数と言います。 物と言いまし

    乱数について本気出して考えてみる|TechRacho by BPS株式会社
  • 「任意の自然数の各桁を、一桁になるまで掛け算する回数の最大回数とその数を示せ」の件 - コンニチハレバレトシタアオゾラ

    発端 12歳の娘の算数の授業で、「任意の自然数の各桁を、一桁になるまで掛け算する回数の最大回数とその数を示せ。最大桁数を出した生徒には賞品が出ます」という自由課題があったそうだ。例えば、15なら1x5=5と1回。93なら9x3=27, 2x7=14, 1x4=3と3回という具合(続き)1/2— Keiko Torii (@KeikoUTorii) 2019年8月13日 上記のツイートを見かけたのでやってみようと思いました。 結果 とりあえず動いたので晒します。 import sys args = sys.argv max = args[1] max = int(max) min = max / 10 min = int(min) print("max: "+ str(max)) print("min: "+ str(min)) result = 0 for i in range(min,

    「任意の自然数の各桁を、一桁になるまで掛け算する回数の最大回数とその数を示せ」の件 - コンニチハレバレトシタアオゾラ
  • 1