タグ

アルゴリズムに関するt-murachiのブックマーク (24)

  • strlen() の深淵 - Qiita

    あらまし strlen() という関数がある。御存知の通り、文字列の長さを算出する標準 C ライブラリの関数だ。 やってることは単純で、例えば以下のように実装できる。 size_t strlen_simple(const char* str) { const char* p = str; while (*p) ++p; return size_t(p - str); } '\0' が見つかるまでポインタを進め、初期位置との差分を返すだけだ。これで機能的には std::strlen() と同等である。 では、速度的にはどうだろう?適当にベンチマークを書いて MSVC 2022 でコンパイル&実行するとこうなった。

    strlen() の深淵 - Qiita
  • Python言語による実務で使える100+の最適化問題 | opt100

    指針 厳密解法に対しては、解ける問題例の規模の指針を与える。数理最適化ソルバーを使う場合には、Gurobi かmypulpを用い、それぞれの限界を調べる。動的最適化の場合には、メモリの限界について調べる。 近似解法に対しては、近似誤差の指針を与える。 複数の定式化を示し、どの定式化が実務的に良いかの指針を示す。 出来るだけベンチマーク問題例を用いる。OR-Libraryなどから問題例をダウンロードし、ディレクトリごとに保管しておく。 解説ビデオもYoutubeで公開する. 主要な問題に対してはアプリを作ってデモをする. 以下,デモビデオ: 注意 基的には,コードも公開するが, github自体はプライベート そのうちにするかもしれない(予約はしているが, 保証はない). プロジェクトに参加したい人は,以下の技量が必要(github, nbdev, poetry, gurobi); ペー

  • アルゴリズム本、書きました! - Qiita

    最後に、17 章で PとNPに関する話題を解説し、世の中には「効率的に解くアルゴリズムを設計することができそうにない難問」が多数あることを見ます。18 章で、これらの難問に取り組むための方法論をまとめます。 競プロをやっている方向け 扱っている題材の難易度については、こんな感じのイメージです! チーター < 書 = 螺旋 < 蟻 難易度が近い螺旋は、スタンスが異なる部分もありますので、よい形で共存できたら、という想いです。 螺旋と比べると、「動的計画法」「貪欲法」「二分探索法」などの設計技法に関する話題をより重視しています 螺旋は「ライブラリを揃えていく」という思想なので、設計技法よりもライブラリになるものを重視する立場です 書では、紙面の都合で「計算幾何学」と「整数論」には触れられませんでしたが、これらは螺旋には載っています 2-2. 書の対象読者 書は、「アルゴリ

    アルゴリズム本、書きました! - Qiita
  • プログラマの実力は経験だけであがらないことがレベル格差につながる - きしだのはてな

    プログラマというのは、道具に慣れることが、実力があがることにならないのですよね。だから、勉強せず業務経験だけだとレベルが低いままということになってしまう。 Javaを10年さわり続けて、Strutsを5年さわり続けても、それだけでは、与えられた画面を手際よく作成できるようになるだけで、たとえばStrutsすらよりよく使えるようになるわけではなかったりする。 Javaにしても、「volatileってなんですか?」という問いに、まあ知らないのはしかたないとしても、解説を見ながらですら答えられない可能性がある。 プログラムの反復生産は、プログラミング能力の向上にあまりつながらない。設定や記述に慣れるだけだ。そして、この「慣れ」というのには「難しいからそもそも実装を回避する」というようなものも含まれる。実力の向上は、作業ができるレベルで止まってしまう。 プログラマとしての実力をあげるための勉強が自

    プログラマの実力は経験だけであがらないことがレベル格差につながる - きしだのはてな
    t-murachi
    t-murachi 2019/05/14
    ✕使う機会がない ○身についてる人は普段から役立ててるけどそうでない人は価値を理解できない / ブコメ眺めてたらそりゃ実力に開きも出る罠としか(´・ω・`)
  • ソートアルゴリズムを極める! 〜 なぜソートを学ぶのか 〜 - Qiita

    NTT データ数理システムでリサーチャーをしている大槻 (通称、けんちょん) です。 今回はソートについて記します。 0. はじめに データ構造とアルゴリズムを学ぶと一番最初に「線形探索」や「ソート」が出て来ます。これらのテーマは応用情報技術者試験などでも頻出のテーマであり、アルゴリズムの Hello World とも呼ぶべきものです。 特にソートは、 計算量の改善 ($O(n^2)$ から $O(n\log{n})$ へ) 分割統治法 ヒープ、バケットなどのデータ構造 乱択アルゴリズムの思想 といった様々なアルゴリズム技法を学ぶことができるため、大学の授業でも、アルゴリズム関連の入門書籍でも、何種類ものソートアルゴリズムが詳細に解説される傾向にあります。記事でも、様々なソートアルゴリズムを一通り解説してみました。 しかしながら様々な種類のソートを勉強するのもよいが、「ソートの使い方」や

    ソートアルゴリズムを極める! 〜 なぜソートを学ぶのか 〜 - Qiita
    t-murachi
    t-murachi 2018/04/06
    うまく編纂すればこれだけで本になりそう。素晴らしい。
  • Alpha Zeroの衝撃と技術的失業|山本一成🚗TURING

    2016年、Google DeepMind社から恐ろしい論文が出された、AlphaGoその名を冠した囲碁プログラムが既存の囲碁ソフトに勝率99%を叩き出したのだ。AlphaGoは強化学習とDeep Learningを組み合わせた囲碁プログラムで、その年に最強の囲碁棋士の一人である李世ドルさんに4勝1負で勝利した。その後も進歩を続けて今のAlphaGoの強さは人類が体感できるレベルを超えるほど強くなったと予想される。 2017年も終わりのころ、Google DeepMind社からまた途方もない論文が発表された。囲碁とほぼ同じ手法で最強レベルのチェスや将棋プログラムを超えたということだった。実際のところ正確に超えたのかどうかちょっとだけ疑問もあるのだが、まず前提として彼らの新手法が途方もない成果をあげたこと素直に祝福したい。彼らは自分たちのプログラムをAlpha Zeroと名付けた。 コンピュ

    Alpha Zeroの衝撃と技術的失業|山本一成🚗TURING
    t-murachi
    t-murachi 2018/01/23
    もはや「機械vs人間」とかナンセンスで、「機械学習vs人間の叡智」の領域に入ってきてるってことか…(゚Д゚;)
  • Google Chromeが採用した、擬似乱数生成アルゴリズム「xorshift」の数理

    2015年12月17日、Google ChromeJavaScript エンジン(処理系)である V8 の公式ブログにて、 JavaScript の標準的な乱数生成APIである Math.random() の背後で使われているアルゴリズムの変更がアナウンスされました。 Math.random() 関数は JavaScript を利用する際には比較的よく使われる関数ですので、親しみのある方も多いのではないかと思います。 新たなバグの発見や、従来より優秀なアルゴリズムの発見によってアルゴリズムが変更されること自体はそれほど珍しくはないものの、 技術的には枯れていると思われる Math.random() のような基的な処理の背後のアルゴリズムが変更されたことに驚きを感じる方も少なくないかと思いますが、 それ以上に注目すべきはその変更後のアルゴリズムです。 実際に採用されたアルゴリズムの原

    Google Chromeが採用した、擬似乱数生成アルゴリズム「xorshift」の数理
    t-murachi
    t-murachi 2016/01/07
    あとで読むけど、冒頭の3つの疑問は、少なくとも感じられなかったなぁ…。
  • あなたの知らないハッシュテーブルの世界

    Please select the category that most closely reflects your concern about the presentation, so that we can review it and determine whether it violates our Terms of Use or isn't appropriate for all viewers.

    t-murachi
    t-murachi 2012/12/07
    何度データを出し入れしても高速なまま劣化しないハッシュテーブルが作られる日は近い… のか?
  • Spaghetti Source - 各種アルゴリズムの C++ による実装

    ACM/ICPC(プログラミングコンテスト)系列の問題を解くことを目標にして,各種アルゴリズムを C++ で実装してみた.極めて意地が悪い類の問題には対応していないし,特定の入力に対して高速に動くということもない.計算量も最良とは限らない. これらを参考にする方への注意とお願い: これらの記述は正確とは限りません.参考文献を参照することを強く推奨します.間違っている場合は是非教えてください. これらのプログラムは間違っているかもしれません.各人で検証することを強く推奨します.バグがあれば是非教えてください. 分類が怪しいので,これはこっちだろう,ということがあればコメントを下さると助かります. 注意! 現在書き換え中 TODO 分類を正しく行う. 全体的に説明と使い方を詳しく. Verify していないものを Verify. ボロノイ図(いつになることやら……) 基 テンプレート グラフ

    t-murachi
    t-murachi 2012/06/27
    学習の過程での output かと思われるので、鵜呑みにしてコピペするより、ここにあるソースの改良を試みることで各自の学習の足がかりにするとよさげな気がする。
  • Google Sites: Sign-in

    Not your computer? Use a private browsing window to sign in. Learn more about using Guest mode

    t-murachi
    t-murachi 2012/04/03
    ここにあるテーマで興味のあるものを独自に勉強してみるのも一興かも知れんね。
  • tiny hash table - DELPHIER@はてな

    Cでコードを書いているとハッシュテーブル*1が欲しくなることが多々あります。というわけで小さいのを書いてみました。 https://github.com/okumura/thtbl ハッシュテーブルについて ハッシュテーブルは、あるキーをハッシュ関数を使ってマッピングし、それに対応する値を関連付けるためのデータ構造です。連想配列として使われたり、ハッシュマップと呼ばれたりもします。ハッシュ関数によってキーをインデックスに変換し(これをハッシュと呼ぶ)、それに対応する配列の要素(スロットまたはバケツと呼ばれる)に値を入れておきます。そこそこメモリを使いますが、その分高速に動作します。 探索において、木構造などの二分探索をベースとした実装では、キーの比較回数がlog2(N)となりますが、ハッシュテーブルでは大抵これよりも小さくなります。比較回数がこれよりも多くなるような状況、つまり衝突が多発す

    tiny hash table - DELPHIER@はてな
    t-murachi
    t-murachi 2012/04/02
    C++11 なら std::unordered_??? を使う時に std::hash の代替だけを自前で書けばいいんだけどね…。
  • 画像の色数を求めたりヒストグラムを作るためのソートをいろいろ実装してみた - DELPHIER@はてな

    画像の色数を求めるにはハッシュ的なものを使うよりもソートした方が速いという話です。 http://blog.livedoor.jp/junki560/archives/21233822.html http://blog.livedoor.jp/junki560/archives/21305807.html また、ヒストグラムを高速に作ろうとすると色の深度に応じてメモリをいます。RGBそれぞれが8ビットだと64MBほどメモリをいます。対してソートでやろうとすると、画素数分だけで済むのでメモリ的にも優しいです。 そんなわけで、ソートです。上記ではクイックソートを使ってますが、クイックソートが最善手とは限りません。最近はメモリが豊富なので、バケツソートや分布数え上げソートや基数ソートも十分実用的です。どれがいいだろう、というわけでいくつか試してみました。クイックソート、分布数え上げソート、基

    画像の色数を求めたりヒストグラムを作るためのソートをいろいろ実装してみた - DELPHIER@はてな
    t-murachi
    t-murachi 2012/03/21
    おー、基数ソート速ぇー。
  • 「なぜsetを使っちゃいけないの?」

    CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

    「なぜsetを使っちゃいけないの?」
    t-murachi
    t-murachi 2012/02/27
    所々注釈としてコード例紹介して検証してくれているのが素晴らしい。
  • ハッシュテーブル攻撃とHaskell - あどけない話

    以下を理解しようとしたときのメモ: Efficient Denial of Service Attacks on Web Application Platforms slides n.runs-SA-2011.004 - web programming languages and platforms - DoS through hash table 概要 外部からのデータに対して、効率の悪いアルゴリズムで処理するとセキュリティホールになるという一般的な問題の一例。N要素のハッシュテーブルの作成は、平均でO(N)だが、最悪で O(N^2) となる。 いろんな言語で、DJB のハッシュが利用されている。 DJBX33A Equivalent string で衝突をたくさん作れる。理解は容易。 DJBX33X 中間一致(Meet-in-the-middle)攻撃で衝突をたくさん発見できる。この理

    ハッシュテーブル攻撃とHaskell - あどけない話
    t-murachi
    t-murachi 2012/01/12
    なるほど。 / そういや C++11 の hash<string> とかって大丈夫なのかなぁ? draft の「21.6 Hash support」にはその辺の技術論って特に明記されてないみたいだけど…。
  • アルゴリズムの勉強のしかた - きしだのHatena

    この記事で、アルゴリズムの勉強はアルゴリズムカタログを覚えることじゃないよということを書きました。 プログラムの理論とはなにか アルゴリズムの勉強というのは、スポーツで言えば腕立て伏せや走り込みみたいな基礎体力を養うようなもので、「ソートなんか実際に自分で書くことないだろう」とかいうのは「サッカーは腕つかわないのに腕立ていらないだろう」とか「野球で1kmも走ることなんかないのに長距離の走り込みいらないだろう」とか言うようなものです。 Twitterでアルゴリズムの勉強とはなにかと尋ねられて、「アルゴリズムの基的なパターンを知って、それらの性質の分析のしかたをしって、いろいろなアルゴリズムでどのように応用されているか知って、自分が組むアルゴリズムの性質を判断できるようになることだと思います。 」と答えたのですが、じゃあ実際どういうで勉強すればいいか、ぼくの知ってるからまとめてみました。

    アルゴリズムの勉強のしかた - きしだのHatena
  • フォント同士を交配させて新しいフォントを作る「genoTyp」が面白い - てっく煮ブログ

    「この発想はなかった!」と驚いた。genoTyp はフォント同士を交配させて新しいフォントを生み出す実験サイトだ。早速、試しにやってみた。1. 第一世代の親を決めるgenoTyp を開いて左上の [Breed] タブをクリックすると「交配ページ」が表示される。[add original font] ボタンをクリックして、祖先となるフォントを2つ追加してみた。交配させるために2つのフォントをドラッグしてくっつけた。くっついた状態になれば交配の準備は完了だ。2. 交配させてみる中央の [cross] ボタンを押すと第一世代が誕生する。4人の子供が誕生した。父親似だったり、母親似だったり、子供によって雰囲気が異なっている。3. 第一世代でも交配別の [original font] を追加させて、第一世代の中から気に入ったものと交配させてみた。3人の子供が第二世代に誕生した。4. さらに交配!今度

  • 講義資料 配列解析アルゴリズム特論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

    t-murachi
    t-murachi 2008/09/20
    プレゼン資料だからなぁ。本気で習得するならもっとちゃんとした教科書を探した方が良いかも。
  • DO++: 機械学習による自然言語処理チュートリアル

    自然言語処理のときに使う機械学習手法のテクニックをざーっと2時間程度で紹介してほしいとのことだったので今日話してきました。基的に、そんなに頑張らなくても効果が大きいものを中心に説明(特にパーセプトロンとか)を説明してます。 紹介した手法はパーセプトロン、最大エントロピー、正則化、多クラス分類、系列分類(CRF, Structured Perceptron)などなどです。どれも一かじりする感じで網羅的に見る方を優先してます。個々の詳しい話はそれぞれの文献や実装などを当たってみてください。 スライド [ppt] [pdf] ここで話しているのは線形識別モデルの教師有り学習が中心で教師無し学習(クラスタリングなど)など他の自然言語処理を支える技術は省いてます。 こういうのを使って(使わなくてもいいけど)どんどんアプリケーション作らないといかんね。 Tarot is not used to ma

    DO++: 機械学習による自然言語処理チュートリアル
  • ガベージコレクションの実装法と評価

    1.はじめに プログラミング言語とはシステム化する対象物を抽象化し、コンピュータで処理可能なコードを記述するために用いる人工言語である。プログラミング言語はコンピュータの機械語と一対一の対応をもったアセンブラから始まり、コンパイラを用いて機械語に翻訳することを前提としたコンパイラ言語、インタプリタと呼ばれるプログラムがソースコードを解釈し実行するスクリプト言語と、記述できる抽象度を高める方向へと進化してきた。 プログラミング言語はその存在理由から、より抽象度の高い記述が行えること、すばやい開発を行える事が求められる。抽象度の高い記述とは、プログラムがどういう処理を行うか(HOW)ではなく何の処理を行うか(WHAT)を記述しやすい構文、機能を持っていることを、すばやい開発とは記述性の高さ、コードの密度の高さ、バグの発生しにくい構文、機能を持っていることをさす。 この抽象度の高い記述、すばやい

  • 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(ウィキ)