タグ

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

  • 徐々に高度になるリングバッファの話 - 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
    距離が同一だと、あんまダイクストラと言わないのでは…
  • はてブの「人気コメント」に Yahoo! の「建設的コメント順位付けモデルAPI」を導入

    ⓘ人気コメント算出アルゴリズムの一部にヤフー株式会社の「建設的コメント順位付けモデルAPI」を使用しています さっきまでは無かったのでここ1時間~数十分くらいで変更されたのか 「建設的コメント順位付けモデルAPI」ってのはこれか Yahoo!ニュース、不適切コメントへの対策として導入している深層学習を用いた自然言語処理モデル(AI)のAPIを無償提供開始 - ニュース - ヤフー株式会社 Yahoo!ニュース、不適切コメントへの対策として導入している 深層学習を用いた自然言語処理モデル(AI)のAPIを 「NewsPicks」、「攻略大百科」、「ママスタコミュニティ」へ無償提供開始 - ニュース - ヤフー株式会社

    はてブの「人気コメント」に Yahoo! の「建設的コメント順位付けモデルAPI」を導入
    UhoNiceGuy
    UhoNiceGuy 2021/07/19
    変化のまとめ読みたいんだけど、さすがに導入前の魚拓取っている人はいないか
  • 「量子」と組合せ最適化に関する怪しい言説 ―とある研究者の小言― - むしゃくしゃしてやった,今は反省している日記

    最近,量子コンピュータの話題をニュースや新聞で見かけることが増えてきました. その中で気になってきたのが,組合せ最適化と量子コンピュータ(特に量子アニーリング)に関する怪しい言説.私自身は(古典コンピュータでの)組合せ最適化の研究をやってきて,量子コンピュータを研究しているわけではないのですが,さすがにこれはちょっと・・・と思う言説を何回か見かけてきました. 最近の「量子」に対する過熱ぶりは凄まじいので,こういう怪しい言説が広まるのは困りものです.すでにTwitter上には,“組合せ最適化は今のコンピュータでは解けない”とか“でも量子なら一瞬で解ける”という勘違いをしてしまっている人が多数見られます*1. さすがに危機感を覚えてきたので,この場できちんと指摘しておくことにしました. 今北産業(TL;DR) “古典コンピュータは組合せ最適化を解けない” → 古典コンピュータで組合せ最適化を解

    「量子」と組合せ最適化に関する怪しい言説 ―とある研究者の小言― - むしゃくしゃしてやった,今は反省している日記
    UhoNiceGuy
    UhoNiceGuy 2021/07/03
    巡回セールスマン問題って89,500点くらいでGive upするのか//相手のワーストケースvs自分の有利なケースはよくやる
  • 高校生がアルゴリズムとスパコンの力で、京都の碁盤目状道路を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以下の束縛の代わりに、評価関数に長さを入れるとどうなるだろう。
  • 解析不能!30年以上前のレトロゲームから謎の「自動生成アルゴリズム」が見つかる - ナゾロジー

    Point ■レトロゲームには容量不足や技術的制約を解決するため、現代の我々から見ても解析できない謎の技術が使われていることがある ■今回、ATARI2600から82年に発売されたゲーム『Entombed』に、全くロジックが不明の迷路自動生成プログラムのコードが発見された ■迷路の壁を完全ランダムに配置すればクリア不能になってしまうが、このプログラムがなぜ通行可能なパターンで迷路を生成しているかは、まったくの謎だという ほんの数十年前、コンピュータ関連の技術が飛躍的に向上しました。 特にデータ容量の向上はめざましく、現代の若い人たちにとって容量の単位は「ギガ」が標準になっています。 しかし初代のスーパーマリオの全ゲーム容量は40KB、初代ドラゴンクエストの全容量は64KBでした。 ちなみにこの記事のトップに貼られている画像の容量は97KBなので、スーパーマリオの2.4倍、ドラゴンクエストの

    解析不能!30年以上前のレトロゲームから謎の「自動生成アルゴリズム」が見つかる - ナゾロジー
    UhoNiceGuy
    UhoNiceGuy 2019/09/25
    ドルアーガと書きに来たら既にドルアーガでいっぱいだった
  • 再帰関数を学ぶと、どんな世界が広がるか - 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
    ボロノイ図を使った解答。海岸線近辺ではボロノイ図がうまく作れないとはどういうことだろう。こういう地図データ、フリーで手に入るのか。今度探してみよう
  • せめてはっきり言おうではないか. Googleは無能であると - yuko-hirom’s blog

    デマや偽情報の拡散問題において,WELQの問題でDeNAは叩いても結局Googleを叩く人は少なかった. 私はここでまたもや大きなる権威の前では日人はおとなしい奴隷となると言う実例を見てしまった.日人にはGoogleほど巨大な存在に対しては盲目的に追従するのだ. bylines.news.yahoo.co.j 上記のニュース *1は見方によればGoogleはデマ情報を重要な情報としてそのリンクを編集してwebページを作成してるとも言える.ただそうしてるのがアルゴリズムか人かがDeNAやNaverまとめとの違いである. これらのサービスによって得られる負の側面はほとんど質的には変わらないではないか? なぜアルゴリズムがやったことは責められず、人間が直接編集したことは責められるのだろうか?人間がやったのだからその馬鹿な人間が悪く,そのような分別のない人間は許されないと人は言う. しかし分

    せめてはっきり言おうではないか. Googleは無能であると - yuko-hirom’s blog
    UhoNiceGuy
    UhoNiceGuy 2017/01/03
    人によって価値観は変わるので、明文化された機械的なアルゴリズムでやって欲しいと自分は思うな。ただ、機械的なアルゴリズムが万能だとは思わないので(中略)それがキュレーションではないかと。
  • ガベージコレクション | 翔泳社

    プログラムが使用しなくなったメモリ上の空間を解放し、他のプログラムが使えるようにするのは、古くはプログラマの役割でした。それがゆえに、しばしば解放を忘れるというヒューマンエラーを引き起こし、ついには「メモリ不足です」と宣告され、あるいはオペレーションシステムもろとも轟沈し、作業中のデータはすべて消え失せ、モニタの前のユーザーは声にならない叫び声をあげるというシーンがしばしば見られました。 そこで研究され実装されたのが、ガベージコレクションです。これはメモリの解放を人任せにせず、プログラム自身が行えるようにするもので、プログラマの苦役の幾ばくかをも解放してくれました。 とはいえ、その実装方法やアルゴリズムは多種多様で、ガベージコレクションがあるから大丈夫、という思い込みだけでプログラムを作成していると、思わぬ落とし穴に転げ落ちることになります。 書はアルゴリズムはもちろん、その実装方法とメ

    ガベージコレクション | 翔泳社
    UhoNiceGuy
    UhoNiceGuy 2016/03/02
    「要チェックや!!」/Kindleでも売ってくれるのかな。
  • ハッシュは頻繁に参照する値を最後に入れると高速 - まめめも

    明日から RubyKaigi なので、ちょっとした小ネタを一つ。 例えば、0 から 9999 までをハッシュに順に入れます。 h = {} 10000.times do |n| h[n] = true end このとき、h[9998] や h[9999] は、h[0] や h[1] より高速です。 どのくらい高速かというと、 1_000_000_000.times { h } # 40.8 sec (ループ自体の速度) 1_000_000_000.times { h[9999] } # 57.2 sec 1_000_000_000.times { h[0] } # 89.1 sech[0] は 89.1 - 40.8 = 48.3 nsec 、h[9999] は 57.2 - 40.8 = 16.4 nsec ということになります。なんと 3 倍も速い。*1 なぜこんなことが起きるのか ハ

    ハッシュは頻繁に参照する値を最後に入れると高速 - まめめも
    UhoNiceGuy
    UhoNiceGuy 2015/12/10
    ほぇー、面白い。なんでこういう結果になるのかの解説もあり秀逸。Rubiist以外にも読んで欲しい。面白い。
  • スパコンで約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 ) | 配電盤
  • 【世界初】はてサを自動的に抽出するアルゴリズムを開発した

    問題提起日のインターネット固有のノイズ源である「はてサ」と呼ばれるユーザーをできる限り簡易な方法で特定したい。 仮説 産經新聞の記事のブコメに「産経」という単語を書いてる場合、ユーザーはその記事における産経の立ち位置・スタンスを批判している場合が極めて高く、従ってそのユーザーは、はてサである可能性が高いという仮説を立てた。 検証「京都」玄関口で排泄物垂れ流し、すさまじき悪臭…“異常”なのに「人権」で動かぬ京都市当局 - MSN産経west http://sankei.jp.msn.com/west/west_life/news/130420/wlf13042012010008-n1.htm http://b.hatena.ne.jp/entry/sankei.jp.msn.com/west/west_life/news/130420/wlf13042012010008-n1.htm この

    【世界初】はてサを自動的に抽出するアルゴリズムを開発した
    UhoNiceGuy
    UhoNiceGuy 2013/04/21
    膨大なぶくまページから統計的にはてサ認定を行うツールを開発したのかと思ったら.../タイトル引用を手動ではじかなきゃいけないようだったらだめだめだね
  • 「プログラミング言語の基礎概念」を読んだ - Pixel Pedals of Tomakomai

    学部生向けなのでさくさく読めてよい。 プログラミング言語の基礎概念 (ライブラリ情報学コア・テキスト) 五十嵐 淳 カバーしているのは操作的意味論*1で、序盤から中盤にかけて単純な自然数の和積算の意味論をベースに徐々に盛りつけてMLライクな言語の意味論を作り上げる。letや関数、再帰関数の意味をどう与えることができるのかはこの辺りを読めば分かる。 後半これに型をつけていくのだが、型を仕様記述言語として説明しているのは面白かった。型のない言語にそれとは別で型付けの意味を与えたときに、「評価できない式(実行時エラーが出る)⊂型付けできない式」ということを述べている。つまり、型付けできればエラーは起きない、と。そして、型付けの仕方を工夫することでこれらの集合がイコールになるよう近づけて仕様記述言語としての精度を上げることができる、という文脈で多相型を持ってきている。 最後は型推論を解説しているが

    「プログラミング言語の基礎概念」を読んだ - Pixel Pedals of Tomakomai
  • 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(ウィキ)
  • 講義資料 配列解析アルゴリズム特論I 情報生命科学基礎/演習 他 -渋谷哲朗

    平成20年度 東京大学大学院 情報理工学系研究科・コンピュータ科学専攻 配列解析アルゴリズム特論I 4/10 4/17 4/24 5/1 5/8 5/15 5/22 5/29 (The problem to be reported - in English) 6/5 6/12 6/19 7/3 7/10 7/17 東京大学 理学部・情報科学科 情報科学特別講義3 (情報科学とバイオインフォマティクス) 6/10 7/15 7/22 東京大学大学院 新領域創成科学研究科・情報生命科学専攻 情報生命科学基礎/演習 5/27 6/17 京都大学大学院 薬学研究科・医薬創成情報科学専攻 情報科学概論 6/3 中央大学大学院 理工学系研究科・物理学専攻 物理学特別講義第二 TBA 創価大学工学部 生命情報工学科 TBA TBA 戻る Copyright (c) 2004- Tetsuo

    UhoNiceGuy
    UhoNiceGuy 2008/09/21
    初めて後で読むを使う屈辱
  • 1