タグ

プログラミングとアルゴリズムに関するUhoNiceGuyのブックマーク (11)

  • 徐々に高度になるリングバッファの話 - Software Transactional Memo

    リングバッファのイメージ図 1. リングバッファとは何か 機能的にはFirst In First Out (FIFO)とも呼ばれるキューの一種であるが、リング状にバッファを置いてそれの中でReadとWriteのインデックスがグルグルと回る構造をとる事によって容量に上限ができることと引き換えに高速な読み書き速度を得たものである。キューを単に実装するだけなら山ほど方法があって線形リストを使ってもいいしスタックを2つ使っても原理的には可能だ。その中でもリングバッファを用いた方法の利点はひとえに性能の高さでありメモリ確保などを行わないお陰でシステム系の様々な場所で使われている。 これの実装自体は情報系の大学生の演習レベルの難度であるが少し奥が深い。まずリングバッファのスタンダードなインタフェースと実装は以下のようなものである。 class RingBuffer { public: explicit

    徐々に高度になるリングバッファの話 - Software Transactional Memo
    UhoNiceGuy
    UhoNiceGuy 2023/07/30
    現代的なCPUでもmod演算は時間がかかるのか//「どうせオーバーフローしないんだから0に巻き戻さなくていいよ」は勉強になった//キャッシュのラインとか凄い世界だ
  • ヒープについてわかりやすく解説してみた – Yasufumi Taniguchi – Medium

    的なデータ構造であるヒープについて、概要、計算量と実装、そして最もシンプルな応用であるヒープソートを紹介します。MITが講義や資料を公開しているMIT OpenCourseWareのアルゴリズムとデータ構造の講義 が非常にわかりやすかったので、その内容に沿ってまとめました。この記事ではHeaps and Heap Sortの内容を以下の順序で解説します。 ヒープの概要ヒープの表現ヒープの構築ヒープの計算量ヒープの実装ヒープソート1. ヒープの概要ヒープ (heap) は優先度付きキュー (priority queue) の実装の1つです。優先度付きキューは集合 (set) を扱うデータ型で、集合に含まれる要素が何らかの優先度 (priority) 順に取り出されるという特徴を持っています。学会のポスター発表を回るときや、旅行先での観光地巡りでは、優先度に基づいて要素を取り出すことが重要

    ヒープについてわかりやすく解説してみた – Yasufumi Taniguchi – Medium
    UhoNiceGuy
    UhoNiceGuy 2022/12/30
    この、priority queueのデータ構造と所謂mallocで確保するメモリ領域が同じheapという名称になった歴史を誰か解説してくれるとありがたい。相変わらずの他力本願
  • 計算複雑性理論を知らないやつが何をやらかすか教えてやろう。 ある業務用..

    計算複雑性理論を知らないやつが何をやらかすか教えてやろう。 ある業務用Webシステムは検索結果の表示件数を5/10/20件から選べるようになっててて,URLのパラメーターで「?n=20」とかやって送ってた。メニューからは三つの値しか選べないが手で書き換えれば100とか200とか選べる穴が空いてた。 で,よりによってメモリ使用量がO(n^2)になるコードを書いていやがった。n=500でOutOfMemoryError。リモートから面白いようにサービスを落とせた。 CSを知ってるやつなら,コードを書いた瞬間から「これnの上限チェック入れないとまずいな」とわかるんだよ。というか,普通にこのコードはまずいと考えてアルゴリズムをなおして,O(1)でDBレコード全件持ってきても落ちないコードにできてたはず。

    計算複雑性理論を知らないやつが何をやらかすか教えてやろう。 ある業務用..
    UhoNiceGuy
    UhoNiceGuy 2022/11/30
    「CSではないのでは?」←日常で身に付けた経験だからCSと感じないのでは。2分探索も日常的に使ってるしね。学ぶ事で経験や感覚を明文化したり、経験しなかったことを覚えられるね//個人的に鳩ノ巣原理はめちゃ役に立
  • 競技プログラミングことはじめ

    第1章 競技プログラミングとは?(p.7~) 第2章 AtCoderの始め方(p.43~) 第3章 競プロで必要な「アルゴリズムと思考力」(p.86~) スライドのまとめ(p.154~)

    競技プログラミングことはじめ
    UhoNiceGuy
    UhoNiceGuy 2022/11/22
    家に帰ったら、数理最適化ことはじめを読んでみよう
  • AtCoderの社長のままトヨタ自動車にアルゴリズムグループを作った話 - chokudaiのブログ

    2022年1月より、トヨタ自動車 デジタル変革推進室 に主査(担当部長)としてジョインし、6月より、アルゴリズムグループを新設しました。 (22/08/09 11:40追記) アルゴリズムグループについての情報は以下のページにあります!!! (追記おわり) atcoder.jp 「なんで急にそんなことやってるの?」、「AtCoderの業務に集中しろよ!って思う人もちょこちょこいると思うので、そのあたりの考えを、AtCoder社長としての立場で書きたいと思います。 AtCoder・chokudaiを知らない人のための情報 ここは知ってる人は飛ばしてください。 AtCoder 2012年から提供されている、プログラミングコンテスト(競技プログラミング)のサービスです。年間70回程度のコンテストをオンラインで開催しており、世界中から40万人のユーザが登録・参加しています。 chokudai At

    AtCoderの社長のままトヨタ自動車にアルゴリズムグループを作った話 - chokudaiのブログ
    UhoNiceGuy
    UhoNiceGuy 2022/08/09
    二分探索やマージソートはプログラム使わない日常生活でも(無意識に)使われているわけで、0.1%をチューンする世界でなくてもアルゴリズム語られて欲しいんだけど、なかなかそうならないね
  • 8時間を0.01秒に短縮 「アルゴリズムの素晴らしさが2分で分かる動画」が今すぐ勉強したくなる分かりやすさ

    記事はアフィリエイトプログラムによる収益を得ています アルゴリズムの素晴らしさを2分で解説した動画が、とても分かりやすくためになると人気です。なるほど、これがアルゴリズムと仕組みかぁ。 最短経路をアルゴリズムで算出しよう この動画では、迷路を最短手数で解くアルゴリズムについて解説。迷路はマス目状になっており、全部で8900億個の手順が存在するものとなっています。全ての経路を試せば最短手順を導き出せますが、普通のコンピュータでは約8時間かかってしまう計算になります。 全パターンの網羅は非常に時間がかかります そこで計算の手順を変更。スタートに0を書き、その隣1を、また隣に2……と繰り返していきます。こうして進めていくと最終的にゴールは34となり、この34が最短手数となることが分かります。今度はゴールから34,33,32とたどっていけば、最終手数で進む経路の1つが導き出せました。 数字を振

    8時間を0.01秒に短縮 「アルゴリズムの素晴らしさが2分で分かる動画」が今すぐ勉強したくなる分かりやすさ
    UhoNiceGuy
    UhoNiceGuy 2022/04/15
    距離が同一だと、あんまダイクストラと言わないのでは…
  • 高校生がアルゴリズムとスパコンの力で、京都の碁盤目状道路を13.9%効率化した話 - Qiita

    2. 研究で解く問題 「いざ研究しよう!」と思っても、条件や設定を決めないと何も始まりません。 まずは研究を分かりやすくするために、「一つの問題」に落とし込むことにしました。 問題設定 縦 $N$ 行・横 $N$ 列の大きさの碁盤の目があります。隣り合う交差点間の距離は 1 です。つまり、交差点が合計で $N^2$ 個あり、それぞれ座標 $(1, 1), (1, 2), ..., (1, N),$ $(2, 1), (2, 2), ..., (N, N-1), (N, N)$ に位置すると考えることもできます。 下の図は、$N = 4$ の場合の交差点の位置です。 あなたは、碁盤の目の交差点の位置は変えずに、道路の並びのみを変えることができます。上手く道路の並びを変えることで、できるだけ「便利」な道路網を建設してください。 「便利な道路網」って何? 私は、以下の 2 つの条件を満たす道路

    高校生がアルゴリズムとスパコンの力で、京都の碁盤目状道路を13.9%効率化した話 - Qiita
    UhoNiceGuy
    UhoNiceGuy 2020/02/17
    凄い!!面白いね。長さがルート2以下の束縛の代わりに、評価関数に長さを入れるとどうなるだろう。
  • 再帰関数を学ぶと、どんな世界が広がるか - Qiita

    0. はじめに 再帰関数は初めて学ぶときに壁になりがちで なんとなくわかった...けれど どんな場面で使えるのだろう...いい感じの例を探したい! という気持ちになりがちです。再帰関数は、なかなかその動きを直感的に想像することが難しいため、掴み所が無いと感じてしまいそうです。 そこで記事では 再帰関数の動きを追いまくることで、再帰関数自体に慣れる 再帰的なアルゴリズムの実例に多数触れることで、世界を大きく広げる! ことを目標とします。特に「再帰関数がどういうものかはわかったけど、使いどころがわからない」という方のモヤモヤ感を少しでも晴らすことができたら嬉しいです。なお記事では、ソースコード例に用いるプログラミング言語として C++ を用いておりますが、基的にはプログラミング言語に依存しない部分についての解説を行っています。 追記 1. 再帰関数とは 再帰の意味はとても広いです。自分自

    再帰関数を学ぶと、どんな世界が広がるか - Qiita
    UhoNiceGuy
    UhoNiceGuy 2019/04/05
    フィボナッチの例なんか再帰が自然な例だと思う。ループを再帰で書けるのではなく、再帰やmapをわざわざループで書いてるのが大半だと思う。この辺は手続き型のイディオムを詰め込まれることの弊害だと思う
  • 「本当に」日本一マクドナルドから遠い場所|ヌーさん | NOT A HOTEL

    こんにちは、業の稼働が 100% フロントエンドになっちゃっていてそろそろデータをいじりたいヌノカワです。 先日、qiita で日マクドナルドから遠い場所という記事を見つけて読んでみたんですが、探索する過程が意外とアナログなところも含めて面白かったです。 ただ、800 を超えるいいねをもらってるのを見て、謎のジェラシーと対抗心が生まれ、地理空間演算で「当に」日マクドナルドから遠い場所を突き止めてみようというのが主旨です。 qiita の当記事では、マクドナルドの地点からバッファー (地点を中心とした円) を生成して徐々に半径を広げ、かすかに残っている陸地を (目視で!) 絞って行くというハートウォーミングな内容です。そこをもう少し論理的に探索してみましょう。 私が考えたアプローチはこんな感じでございます。 1. マクドナルドの地点を母点としたボロノイ図を生成する 2. ボロノイ

    「本当に」日本一マクドナルドから遠い場所|ヌーさん | NOT A HOTEL
    UhoNiceGuy
    UhoNiceGuy 2018/05/13
    ボロノイ図を使った解答。海岸線近辺ではボロノイ図がうまく作れないとはどういうことだろう。こういう地図データ、フリーで手に入るのか。今度探してみよう
  • スパコンで約2時間36分かかったという、5×5の魔方陣の全解列挙を、パソコンで試す(C ) | 配電盤

    魔方陣の解の列挙は並列化しやすそうな問題ですが、ここでの方針では、探索効率を上げるためには条件分岐が不可欠なので、(「数」を求めるだけだとしても)GPGPUでうまくやる方法がわかりません。そこで、CPUに載っているコアのみで並列化します(Xeon Phiなら簡単なのでしょうか→追記参照)。 一番外側の、0から(1<<25)-1まで変化する変数iのループをOpenMPで並列化します(schedule(guided)では遅くなります。schedule(auto)はVisual C++でサポートされたら試します)。変数iは上の図の緑の部分(カンで5個にしました)を各数5ビットで表現し、つなげたものです。マスに入りうる数は1から25までなので、5ビットというのはちょっと冗長ですが、とりあえずはよしとしましょう。 出力はバイナリ形式で、1つの解に25バイト使います(1つのマスに入る数を1バイトで表現

    スパコンで約2時間36分かかったという、5×5の魔方陣の全解列挙を、パソコンで試す(C ) | 配電盤
  • GC - GCアルゴリズム詳細解説 - livedoor Wiki(ウィキ)

    GC¥¢¥ë¥´¥ê¥º¥à¾ÜºÙ²òÀâ ÆüËܸì¤Î»ñÎÁ¤¬¤¹¤¯¤Ê¤¤GC¥¢¥ë¥´¥ê¥º¥à¤Ë¤Ä¤¤¤Æ¾ÜºÙ¤Ë²òÀ⤷¤Þ¤¹ ¥È¥Ã¥×¥Ú¡¼¥¸¥Ú¡¼¥¸°ìÍ÷¥á¥ó¥Ð¡¼ÊÔ½¸ GC ºÇ½ª¹¹¿·¡§ author_nari 2010ǯ03·î14Æü(Æü) 20:47:11ÍúÎò Tweet ¤³¤ÎWiki¤¬Ìܻؤ¹½ê GC¤È¤Ï¡© GC¤ò³Ø¤ÖÁ°¤ËÃΤäƤª¤¯»ö ¼Â¹Ô»þ¥á¥â¥ê¹½Â¤ ´ðËÜ¥¢¥ë¥´¥ê¥º¥àÊÔ Reference Counter Mark&Sweep Copying ±þÍÑ¥¢¥ë¥´¥ê¥º¥àÊÔ IncrementalGC À¤ÂåÊÌGC ¥¹¥Ê¥Ã¥×¥·¥ç¥Ã¥È·¿GC LazySweep TwoFinger Lisp2 Pa

    GC - GCアルゴリズム詳細解説 - livedoor Wiki(ウィキ)
  • 1