タグ

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

  • ‪実世界で超頻出!二部マッチング (輸送問題、ネットワークフロー問題)の解法を総整理!‬ - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? 0. はじめに --- 二部マッチング問題は実世界で超頻出 はじめまして。NTTデータ数理システムでアルゴリズムを探求している大槻 (通称、けんちょん) です。 好きなアルゴリズムはタイトルにもある二部マッチングですが、会社ではなぜか「DP が好きな人」と呼ばれています。 以前に動的計画法 (DP) の典型パターンを整理した記事を執筆したのですが、DP と並んで超頻出の話題として二部マッチング問題があります。二部マッチング問題とは、例えばマッチングアプリなどに見られるように、2 つのカテゴリ間で最適なマッチングを構成していく問題です。実

    ‪実世界で超頻出!二部マッチング (輸送問題、ネットワークフロー問題)の解法を総整理!‬ - Qiita
  • ナップサック問題でマラソンマッチ入門 - notブログ

    マラソンマッチって? 競技プログラミングのうち、「より良い解を求める」ことを競うコンテストをマラソン形式と呼びます。 例えば厳密解を求めることができない問題について、近似解のスコアを競ったりします。 マラソンでよく使われるアルゴリズム マラソンで頻出なのは「ビームサーチ」と「焼きなまし法」です。 この記事ではナップサック問題を例にしてこの2つのアルゴリズムを解説します。 もちろん、この2つのアルゴリズムはどちらも近似アルゴリズムなので最適解は求められません。 ビームサーチ まずは順番にナップサックに入るだけ入れるコードを書いてみます。 #include <iostream> using namespace std; int main() { // 個数 const int N = 100000; // ナップサックの大きさ const int W = 100000; // 重さ・価値 in

    ナップサック問題でマラソンマッチ入門 - notブログ
  • AWSユーザーは必ず覚えておきたいExponential Backoffアルゴリズムとは何か - yoshidashingo

    cloudpackエバンジェリストの吉田真吾(@yoshidashingo)です。 Exponential Backoff 直訳すると「指数関数的後退」つまり、指数関数的に処理のリトライ間隔を後退させるアルゴリズムのことです。 詳しくはWikipediaに記載があります。 Exponential backoff - Wikipedia語でブログに書かれている方もいらっしゃいます。 exponential backoffのメモ – Siguniang's Blog これを見ていると、どうやらこのアルゴリズムは古くから通信装置において、イーサネットフレームのデータ送信時にコリジョン(衝突)を検出したら一定時間待機して再送して、処理を完結させるためのアルゴリズムとして使われているようです。 通信機器の世界に限らず、アプリケーションの分野でも、大規模で予測不能な処理量を有限なリソースでさばく

    AWSユーザーは必ず覚えておきたいExponential Backoffアルゴリズムとは何か - yoshidashingo
  • もし女子大生プログラマに『アルゴリズム』を図解で教えるとしたら -

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

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

    作成日:2004.05.04 修正日:2012.09.01 このページは 2003年の9/11、9/28 の日記をまとめて作成。 はじめに PowerPC 系や Alpha などには population count と呼ばれるレジスタ中の立っているビット数を数える命令が実装されている。 集合演算を行うライブラリを実装したい場合などに重宝しそうな命令である。 職場でこの population count 命令について話をしているうちにビットカウント操作をハードウェアで実装するのは得なのか?という点が議論になった。 CPU の設計をできるだけシンプルにするためには、複雑で使用頻度の低い命令は極力減らした方がよい。 例えば SPARC は命令セット中にビットカウント演算があるが、CPU 内には実装しないという方針をとっている(population 命令を実行すると不正命令例外が発生し、それを

  • 第3回 8パズル

    アルゴリズムと聞いて、何を思い浮かべますか。「実際にプログラミングを行う上では何に役立つかよくわからない」と感じている方もおられるのではないでしょうか? この連載では、「アルゴリズム」を、具体的な問題に対して適用していく際の考え方を紹介します。今回は「8パズル」について解説します。 問題1◆8パズル 1から8までのパネルと一つの空欄で構成される、3×3のスライドパズルがあります。パネルがばらばらに並べられた状態から始めて、左上から1、2、…、8と並べられたら完成です(図1)。このパズルを解くプログラムを作成してください。 この問題を幅優先探索で解くには、「パズルのパネルが最初にどういった配置になっているか」ということを示す初期状態を頂点とし、そこから遷移可能な状態を辺でつないだグラフで表します(図1)。初期状態から辺でつながれた状態を次々に調べることによって、探索を進めていくわけです。 こ

    第3回 8パズル
  • 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.

  • 数あるソートアルゴリズムをビジュアル化し堪能できるサービス「SORTING」

    大小の関係が決められたデータを小さい順や大きい順に並び替える作業はソートと呼ばれ、コンピュータには欠かせないプログラムです。そのため、ソートをより早く・確実に・効率良く実行できるように、さまざまなアルゴリズムが考案されてきました。そんなコンピュータの発展にかかせない役割を果たしてきたソートアルゴリズムをビジュアル化することで直感的に理解できるのが「SORTING」です。 SORTING http://sorting.at/ これがSORTINGのサイトページです。ソートアルゴリズムを選択してページ下の「PLAY」ボタンをクリックすると、そのソートアルゴリズムを使ってボールが並び替えられます。 たとえばアルゴリズム「クイックソート」でランダムに並んだ状態の大きさの異なるボールを左から小さいもの順に並び替えるとこんな感じです。 選べるソートアルゴリズムは、クイックソート・ヒープソート・スムース

    数あるソートアルゴリズムをビジュアル化し堪能できるサービス「SORTING」
  • 【Ruby】【アルゴリズム】10パズルを解く。ファイナルアンサー。回答全部入り。 - せかいや

    振り返り。テンパズルとは。 1から9までの、1桁の数字がかかれたカードが4枚ある。 この数字をそれぞれ1回ずつ使い、10になるように計算する。 あれです。 駅の切符とか、ナンバープレートとかで暇つぶしにやるあれ。 方法 1.計算順序を考えるのは大変なので、逆ポーランド記法でパターンを列挙する ⇒この記事でやりました 2.逆ポーランド記法を計算するメソッドを作る ⇒この記事でやりました 3.4つの数の組み合わせを列挙するメソッドを作る ⇒この記事でやりました ここまできたらあとは計算するだけなので、先が見えています。 ポイント 0で割り算するとinfinityとなり、to_iメソッドを呼び出すとエラーになります。 0で割り算するときは答えが0になると定義しました。 コード class Calc def self.make_expression(str) @@data = str.split(

    【Ruby】【アルゴリズム】10パズルを解く。ファイナルアンサー。回答全部入り。 - せかいや
  • もう一度基礎からC言語 第54回 アルゴリズムの基礎・4~二分探索 パズル~9枚の金貨

    今回は、いきなりパズルを出題しましょう。有名なパズルなので、解き方を知っている人も多いかと思います。しかし、重要なのは答をさっと提示できるかどうかではなく、どうやってその答えにたどり着いたのか? という「考える過程」です。 問) 9枚の金貨があります。その中の1枚は偽物ですが、あまりにそっくりに作られているので、見分けがつきません。ただ、偽物は物よりわずかに軽いことだけが判っています。 天秤式の秤(はかり)を使って、最も少ない回数で偽物を見付けるには、どうすればよいでしょう? -------- Let's think! ---- 答) 以下の手順が考えられます。 9枚の金貨を3枚ずつ3組に分けます。各組をA、B、Cとします。 秤にA組の3枚とB組の3枚を左右の皿に乗せます。 秤が釣り合えば、AとBはすべて物だと分かるので、残るC組の3枚に偽物が混じっていることになります。 もし秤が釣り

  • やわらか頭でアルゴリズムを10倍生かす

    柔軟な発想で問題を定式化できれば、定番のアルゴリズムを驚くほど広い範囲に適用できます。 トップクラスのプログラマが問題を解く際にどのように考えているのかを紹介します。 目次

    やわらか頭でアルゴリズムを10倍生かす
  • 5次魔方陣を一般的なコンピュータで10分で実行したという記事に対しての考察 : mswinvksの忘備録

    [急いで打ったので文がぐちゃぐちゃですし強調等もないです。すみません。] [定期的に記事の一番下にこっそりと僕のコメントを追加しています。一応ご確認ください] このような記事を発見しました。 スパコンで約2時間36分かかったという、5×5の魔方陣の全解列挙を、パソコンで試す(C++) 魔方陣の総数を求める、ということを、僕はスーパーコンピュータT2K-Tsukubaで約2時間30分で計算しましたが、この記事では一般的なコンピュータで10分で計算した、というものです。挑発的ですね。 僕のプログラムを1コア上で実行すると約200時間かかりました。(2012年ごろのAMD Opteron) (TODO:スパコンでの実行時間から1コア上での実行時間を割り出すと、200時間からかけ離れてるけどなんでだろう?) そして、この記事での実行環境は12コアなので、1コア換算すると実行時間は10分*12コア=

    5次魔方陣を一般的なコンピュータで10分で実行したという記事に対しての考察 : mswinvksの忘備録
  • スパコンで約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 ) | 配電盤
  • PageRankアルゴリズムを使った人事評価実験 | 株式会社サイバーエージェント

    2-2-1.一般的な360度評価による評価方法 問題点 一般的に評価プロセスが公開されていないため、最終評価までのプロセスが不透明である 全員が全員を評価するのは多数の社員がいる場合は不可能である ランダム抽出によるお互いの評価を行うと、まったく違う専門分野を評価したり、まったく関わりあいのない人を評価することになり精度が下がる 2-2-2.専門分野での評価者による評価方法 問題点 *評価者になる人材の不足 高い専門スキル、会社とのビジョンマッチ、メンバーからのその専門分野での高い信頼の全てを備えている人材が専門分野毎に必要。 さらに、評価の納得性を保つためにはメンバーからの信頼がある人材ではないと評価できない。 *評価者によって評価ポイントの違いがある 同じ分野の技術者でも、スキルの価値をどこに置いているかというスタンスの違いから評価ポイントにゆらぎが発生する。 さらに評価者自体

  • CodeIQで結城先生が出題されたCrossingが神がかっていた件 - やねうらおブログ(移転しました)

    CodeIQで挑戦者数が400人超えという異例の事態になったCrossingとはどんな問題だったのか。twitterでも恐ろしい勢いで拡散され、最終日に100人を超えるチャレンジがあった、この問題。一体どこにそんな魅力があったのかについて考えてみる。 まず、このように注目されるためには満たすべき条件が二つある。 繁盛する飲店を考えてもわかるように、まず美味しくなければならない。CodeIQで言うと、問題として良問でなければならない。解答後の達成感がなくてはならない。 次に、飲店なら、その店に入ってみようという気にさせなければならない。入りにくそうなお店でも、料理さえ美味しければその後口コミで広がることもあるだろうが、それだと繁盛するまでに時間がかかりすぎる。だからCodeIQで言うと、まず問題を解いてみようという気にさせなければならない。 このどちらが欠けても駄目である。この問題はこの

    CodeIQで結城先生が出題されたCrossingが神がかっていた件 - やねうらおブログ(移転しました)
  • アルゴリズムは記者より優れた記事を書けるだろうか?

  • 情報系修士にもわかるダブル配列 - アスペ日記

    最近話題の「日本語入力を支える技術」を途中まで読んだ。 3章がものすごく気合いが入っている。 trie(トライ)というデータ構造の2つの実装、「ダブル配列」と「LOUDS」について詳しく説明がされている。 ダブル配列については、ぼくは以前論文を読んで勉強しようとしたのだが、その時は難しくてあきらめた覚えがある。しかし、このの説明を読むことで理解ができた。 ありがたい。 感銘を受けたので、このを教材に友達と2人勉強会をした。 この2人勉強会というのは、ぼくが復習を兼ねて友達に教えるというのがだいたいのスタイル。 しかし、いざやってみるといろいろと難しい。 次のようなところでひっかかるようだ。 例のサイズが小さく、イメージを喚起するのが難しい。 最初の図のノード番号と、最終的なダブル配列上の位置が異なるため、混乱する。 単語終端について言及がないので、どのノードが単語を表しているかがわから

    情報系修士にもわかるダブル配列 - アスペ日記
  • 暴走するアルゴリズム、ウィーナーの危惧 - Zerobase Journal

    金融の世界ではマシン同士の取引が「暴走」した事例が知られています。今後、多くの分野でマシン間通信が導入されていきますが、同様のリスクをはらんでいると言えます。これは単にリスクの量的な問題であるだけでなく、統治の問題としても考えるべきではないかと思います。 Wired日版に「暴走するアルゴリズム」というシリーズがありました。 アルゴリズムはあまりにわれわれの金融システムに浸透しているので、もはや市場はそれなしには機能しなくなってしまっている。(...) だが最悪の場合、それは不可解でコントロール不能のフィードバックのループとなる。これらのアルゴリズムは、ひとつひとつは容易にコントロールできるものなのだが、ひとたび互いに作用し合うようになると、予測不能な振る舞いを─売買を誘導するためのシステムを破壊しかねないようなコンピューターの対話を引き起こしかねないのだ。(...) 今日ではこれらの唐突

  • 頻出典型アルゴリズムの演習問題としてよさげなやつ - kyuridenamidaのチラ裏

    効率的な別解とか存在する問題もあるけど演習によさそうなやつをピックアップ。そのアルゴリズムじゃないと解けないわけではないって問題も多いので注意。(ただ演習するのには都合が良いかなと)※個人的難易度をつけてみました。とても主観的な難易度付けなので気にせず解いてみてください。深さ優先探索・Balls[☆]・Sum of Integers[☆]・The Number of Island[☆]・Block[★]幅優先探索・Mysterious Worm[★]・Cheese[★]・Seven Puzzle[★☆]・Stray Twins[★★]・Deven-Eleven[★★]・Summer of Phyonkichi[★★☆]ワーシャルフロイド法(For 全点対最短路問題)・Traveling Alone: One-way Ticket of Youth[★]・A reward for a Car

  • ChordアルゴリズムによるDHT入門

    今回はDHTを実現するアルゴリズムである「Chord」の細かい解説スライドを作成しました。 ( 掲載URL: http://did2.blog64.fc2.com/blog-entry-347.html ) Chordの説明はたくさん書かれています。 もちろん、それらと同じように書いたのではほとんど意味がないと思うので、 論文を読んでもすぐには分からない全体像から、どこが重要か、どの点によってメリットが生まれているかなどに注目しつつ、飲み込みやすいストーリーになるように注意しました。 なおかつ、出来るだけ論文に沿うように気を付けてみました。

    ChordアルゴリズムによるDHT入門