タグ

アルゴリズムに関するa-hamahamaのブックマーク (34)

  • 驚くほどキレイな三次元シーン復元、「3D Gaussian Splatting」を徹底的に解説する - Qiita

    はじめに 最近、3D業界で大きな衝撃を与えた「3D Gaussian Splatting」1について、ご存知でしょうか?数少ない写真から、目を奪われるほど美しい三次元シーンを再構成できるデモを見て私も大感動しました。なぜこんなに美しいのか、どんな技術で実現したのか、興味が湧いています! "普通の3D物体ではなく、カメラの移動に合わせて、水面に映る景色も正確に表現しています。これはなかなか凄い..." 私も時間をかけて論文や公開されたコード2を勉強しました。家の実装はCUDA化されており、難解な部分が多く、論文に書かれていないこともあります。そのため、「3D Gaussian Splatting」を勉強したい人にむけ、わかりやすい解説記事を書こうと思いました。単に概念や考え方だけでなく、ゼロから再実装できるように、すべてのロジックを数式として整理し、徹底的に解説しようと思います。 「3D

    驚くほどキレイな三次元シーン復元、「3D Gaussian Splatting」を徹底的に解説する - Qiita
  • Secrets from the Algorithm: Google Search’s Internal Engineering Documentation Has Leaked

    Google, if you’re reading this, it’s too late. Ok. Cracks knuckles. Let’s get right to it. Internal documentation for Google Search’s Content Warehouse API has leaked. Google’s internal microservices appear to mirror what Google Cloud Platform offers and the internal version of documentation for the deprecated Document AI Warehouse was accidentally published publicly to a code repository for the c

    Secrets from the Algorithm: Google Search’s Internal Engineering Documentation Has Leaked
  • 条件変数 Step-by-Step入門 - yohhoyの日記(別館)

    多くのプログラミング言語では、マルチスレッド処理向け同期プリミティブとして「ミューテックス(mutex)」と「条件変数(condition variable)」を提供しています*1 *2。ミューテックスは排他制御機構として有名ですし、その動作もロック(lock)/アンロック(unlock)と比較的理解しやすいため、不適切に利用されるケースはあまり無いと思います*3。一方、条件変数の動作仕様はしばしば誤解され、不適切な利用による並行性バグに悩まされるケースが多いようです。 記事では、スレッドセーフなFIFO(First-In-First-Out)キューを段階的に実装していく事例を通して、条件変数の適切な使い方について説明していきます。例示コードではC++11標準ライブラリを用いますが、Pthreads(POSIX Threads)やC11標準ライブラリへは単純に読み替え可能です(→Pthr

    条件変数 Step-by-Step入門 - yohhoyの日記(別館)
  • カハンの加算アルゴリズム - Wikipedia

    カハンの加算アルゴリズム(英語: Kahan summation algorithm、直訳するとカハンの総和アルゴリズム)とは、有限精度の浮動小数点数列の総和を計算する際の誤差を改善する計算手法・アルゴリズム。計算機において精度に制限のある計算をする場合[1]に、計算の途中の誤差を保持することで補正する。Compensated summation(補正加算)とも呼ぶ[2]。 単純に n 個の数値の総和を計算すると、n に比例して誤差が増えていくという最悪のケースがありうる。また、無作為な入力では二乗平均平方根の誤差すなわち に比例する誤差が生じる(丸め誤差はランダムウォークを形成する)[3]。補正加算では最悪の場合の誤り限界 (error bound) は n とは独立なので、多数の数値を合計しても、誤差は使用する浮動小数点数の精度に依存するだけとなる[3]。 このアルゴリズムの名は考案し

  • next_permutationがイマイチよくわからなかったのでまとめてみた - Qiita

    概要 next_permutationというアルゴリズムが実装を眺めてもよくわからなかったので自分がわかるようにまとめてみました。 C++で書いてます。 参考にしたもの C++語リファレンス std::next_permutation そもそもnext_permutationって何? 順列生成アルゴリズム。 辞書順で次の数列を生成出来る。 実際に、数列を生成してみる。 #include <iostream> #include <algorithm> int main() { int array[] = {1, 2, 3}; do { for (int i = 0; i < 3; i++) { std::cout << array[i] << " "; } std::cout << std::endl; }while (std::next_permutation(array, array

    next_permutationがイマイチよくわからなかったのでまとめてみた - Qiita
  • 【C】srand(time(NULL))をしても同じ乱数が生成される

    C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

    【C】srand(time(NULL))をしても同じ乱数が生成される
  • なぜ画像に「ぼかし」を入れると色の境界部分がつぶれてしまうのか?

    画像に「ぼかし」を入れたとき、色と色の境界部分が2つの色の中間色ではない異なる色合いで表示され、違和感をおぼえることがあります。これは画像処理専門の画像編集ソフトで「ぼかし」を入れる場合でも、ソフトによっては起こりうることで、ソフトウエアに実装されているぼかしアルゴリズムが根的に間違っているのが原因だとのこと。YouTubeで物理関連のムービーを多数公開しているminutephysicsチャンネルのムービーで、どのように間違っているのか、わかりやすく解説されています。 Computer Color is Broken - YouTube カラフルな画像に「ぼかし」処理を加えた場合、現実の世界では起こりえない、色と色の境界部分に奇妙な影が表示されることがあります。 この問題は、画像の「ぼかし」に限らず、半透明な線を描いた時も、色と色の間に奇妙な影が映し出されることも。 この醜い影が発生する

    なぜ画像に「ぼかし」を入れると色の境界部分がつぶれてしまうのか?
  • Pythonでプログラミング問題解きつつアルゴリズムを初心者向けに図解する - paiza times

    青木です。paizaラーニング担当のエンジニアです。 paizaで公開しているプログラミングゲームエンジニアが死滅シタ世界〜アンドロイドとふたりぼっちで生きろ〜』、みなさんチャレンジしていただけましたでしょうか? 先日すべての問題の解答コードを公開しましたが、今回はこの中でもっとも難易度の高い「有名なプールサイド [MISSION LEVEL: A]」の問題の概要と解法について図解で解説します。 paiza.hatenablog.com 「とりあえずどんな問題か知りたい」「やってみたけど解けなかった」といった方の参考になればと思います。 ちなみに、こちらの問題はランキング問題となっており、上位スコア獲得者はランキングに掲載されます。 後半ではより効率的な解き方でスコアを高めていく方法についても解説しますので、「とりあえず正解はできるけどスコアが伸びない」「もっといい感じの解き方が知りたい

    Pythonでプログラミング問題解きつつアルゴリズムを初心者向けに図解する - paiza times
  • プログラマの採用面接で聞かれる、データ構造とアルゴリズムに関する50以上の質問 | POSTD

    情報科学科の卒業生やプログラマの中には、UberやNetflixのような新興企業や、 AmazonMicrosoftGoogle のような大企業や、InfosysやLuxsoftのようなサービスを基とする企業で、プログラミング、コーディング、ソフトウェア開発の仕事に就きたいと考える人が大勢います。しかし、実際にそういった企業で面接を受ける場合、大半の人が プログラミングに関してどのような質問をされるか 見当もつきません。 この記事では、 新卒生からプログラマになって1〜2年までの 経験値が異なる人たち向けに、それぞれの プログラミングの面接でよく聞かれる質問 をいくつか紹介していきます。 コーディングの面接では、主に データ構造とアルゴリズムに基づいた質問 がされますが、 一時変数を使わずにどのように2つの整数をスワップするのか 、というような論理的な質問もされるでしょう。

    プログラマの採用面接で聞かれる、データ構造とアルゴリズムに関する50以上の質問 | POSTD
  • 初心者でも機械学習の基本的なアルゴリズムを学べる11のスライド - paiza times

    Photo by fdecomite こんにちは。谷口です。 最近、機械学習の勉強をしている人や、機械学習関連の求人が増えてきましたね。弊社のエンジニアにも、機械学習を勉強中の人達が何人かいます。 ただ、初心者だと「機械学習を勉強したいけど、難しいし何から手を付けたらいいのかよくわからない」という人も多いかと思います。 そこで今回は、機械学習の勉強を始めたばかりという初心者の方向けに、機械学習でよく使われるアルゴリズムがわかるスライドをいくつかご紹介します。 ■機械学習以前 そもそも「機械学習で何ができるのか・どんなものなのか知りたい」という段階の人が機械学習の概要をつかむには、このあたりのスライドが参考になるかと思います。 If文から機械学習への道 from nishio www.slideshare.net 機械学習入門以前 from mrtc0 www.slideshare.net

    初心者でも機械学習の基本的なアルゴリズムを学べる11のスライド - paiza times
  • ImageMagick リサイズ補間アルゴリズム - Qiita

    はじめに ImageMagick は画像の拡大や縮小、いわゆるリサイズ処理を制御するオプションが幾つもあります。 -resize, -thumbnail, -scale, -sample, -resample, -geometry。 これらのオプションと、リサイズのちょっとだけ細かい話をします。 エントリで説明しない事 ImageMagick 初心者がはじめに引っかかる、100x100 を指定したのに 100x100 の画像が出来ない問題は別記事にしました。そちらをご参照下さい。 ImageMagick の Geometry 仕様 https://qiita.com/yoya/items/704fdfbd881f166125d8 あと、少し高度なリサイズとして -distort Resize があります。時間がかかっても質の良いリサイズが欲しい場合にお勧めです。更に、特殊なリサイズとして

    ImageMagick リサイズ補間アルゴリズム - Qiita
  • [初心者向け] プログラムの計算量を求める方法 - Qiita

    はじめに この記事では、プログラムの計算量を求める方法を説明します。プログラミングの初心者向けに、厳密さよりも分かりやすさを優先して説明していきます。 サンプルコードについて この記事のサンプルコードは、C言語(C99)で記述しています。 計算量とは? 計算量とは、 「そのプログラムがどれくらい速いかを大雑把に表す指標」 です。 もう少し正確に言うと、 「入力サイズの増加に対して、実行時間がどれくらいの割合で増加するかを表す指標」 です。 グラフによる計算量の表現 計算量をグラフで表すと、以下のようになります。 これは、「入力サイズ $n$ が増加するにつれて、実行時間が $n$ に比例して増加する」ということを表しています。 別のグラフも見てみましょう。 これは、「入力サイズ $n$ が増加するにつれて、実行時間が $n^2$ に比例して増加する」ということを表しています。 計算量を求め

    [初心者向け] プログラムの計算量を求める方法 - Qiita
  • ソートアルゴリズムを極める! 〜 なぜソートを学ぶのか 〜 - Qiita

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

    ソートアルゴリズムを極める! 〜 なぜソートを学ぶのか 〜 - Qiita
  • C++11 乱数 std::random 入門

    rand() の問題点 これまで広く使用されてきた rand() による乱数生成には以下の問題点がある。 生成される範囲が [0, 32767] と狭い rand() % N は一様では無い 周期があまり長くない 乱数生成アルゴリズムが固定(通常は線形合同法) 正規分布など、一様でない乱数生成が面倒 rand() で生成される値の範囲は [0, 32767] と狭い。15ビットしかない。 (rand() << 15) + rand() とすれば、30ビット乱数にすることは可能だが、スマートではないし、 生成アルゴリズムの関係で、乱数に偏りが出る場合がある。 通常、乱数として欲しいのは [0, N) 範囲の値であることが多い。この場合は rand() % N とすることが一般的だ。 しかし、このようにして生成した乱数は一様でなく偏りがある。特に N が大きい時にその現象が顕著になる。 例えば

  • 一から学ぶベジェ曲線 | POSTD

    (編注:SVGアニメーションを元記事にならい追加しました。リクエストありがとうございました。) 皆さんは線分のことをどう表現しますか? 線分は、端点によって考えられるかもしれません。その端点を P0 、 P1 と呼ぶことにしましょう。 線分を厳密に定義するならば、「 P0 と P1 を結ぶ直線において、 P0 と P1 の間にある全ての点の集合」と言えるかもしれません。これは以下のように表せるでしょう。 便利なことに、上記の定義から、その線分上のどこにある点の座標でも簡単に求めることができます。例えば、中点は L(0.5) にあります。 実は、2点間のどんな値でも、任意の精度で 線形補間する ことが可能です。そのため、時間関数 L(t) の t で線をたどるといった、より複雑なことができるのです。 ここまで来ると、「それが曲線と何の関係があるのか?」と不思議に思うかもしれません。2つの点だ

    一から学ぶベジェ曲線 | POSTD
  • 初心者でもOK!レベル別・アルゴリズムをすぐに学べる書籍とサイト12選 - paiza times

    Photo by Tim Samoff 秋山です。 皆さんはアルゴリズムについてどれくらい知っていますか?というか勉強したことありますか? 私はもともと情報系だったので学校でも習いましたが、paizaのプログラミングスキルチェック問題を作るときなどはいまだにいろいろ調べることもあります。 アルゴリズムについて勉強したことがない人の中には「ずっと気になってはいるものの、各プログラミング言語の書き方やフレームワークの使い方などを学ぶことに手一杯で、アルゴリズムはつい後回しになっている…」という方も多いと思います。 ただ、アルゴリズムを知らないままプログラミングを続けていると、少し複雑な処理を考えなければならなくなったときなどに、力技のやり方しか考えつかなくて「すごい人だったらもっとスマートな書き方ができるんだろうな……」と悶々としてしまうことがあるはずです。 今回はそんな方に向けて、アルゴリズ

    初心者でもOK!レベル別・アルゴリズムをすぐに学べる書籍とサイト12選 - paiza times
  • 文字列アルゴリズムの学びかた - Hatena Developer Blog

    こんにちは!はてなアプリケーションエンジニアの id:takuya-a です。 みなさんは、このような疑問をもったことはありませんか? grep はどのように文字列を検索しているのか? MeCab はどうやって辞書を高速にルックアップしているのか? パーサやコンパイラを作りたいけど、何から始めればいいのか? 稿では、「文字列アルゴリズムとはどんなものなのか?」「なぜ重要なのか?」「何を知っておくべきか?」「どうやって勉強すればいいのか?」といった疑問にお答えしていこうと思います。 文字列アルゴリズムの意外な応用や、モチベーションを保ちやすい勉強のしかた、文字列アルゴリズムを勉強するために行った社内での取り組み、実装するときのコツといったトピックについても触れています。 このエントリは、はてなエンジニアアドベントカレンダー2016の22日目の記事です。昨日は id:syou6162 さんに

    文字列アルゴリズムの学びかた - Hatena Developer Blog
  • Lanczos関数による画像の拡大縮小

    Lanczos関数を使って画像を拡大縮小すると、高品質な画像が得られるのだそうだ。 その仕組みを知りたいと思っていつも通りGoogleのお世話になったが、仕組みを解説した情報が見つからない。 見つかるのはLanczosという名前の紹介や、画像処理ソフトの紹介ばかり。 もっとも、探し方が悪いのかもしれないけど。 なぜ高品質な画像が得られるのか? 他の方法とは何が違うのか? 断片的な情報から調べていって、その理由が理解できた。 はっきり言ってこれを解説するのは難しい! Lanczos関数 まずはLanczos関数について。 そもそもLanczosを何と読むのかが疑問だったが、ランツォシュと読むらしい。 数学者の名前。 Lanczos sinc関数とかLanczos窓関数とかLanczosフィルタとか、人によって色々な呼び方をしていて、正しい呼称がどれなのかはっきりしないが、Lanczos wi

  • 計算量のはなし - 赤い黒歴史を蓄積する

    どうも華麗なるキャッツパーです。キャットアッパーです。 この記事はCompetitive Programming Advent Calendar Div2013, 12/7の記事です。 私は過去に、暇に任せてこのようなスライドを作ってしまいました。 有名アルゴリズムとそれの計算量について列挙するのが楽しすぎて作ってしまいました。後悔しております。 記事では「計算量ってどうやって計算するの?」みたいな話を競プロの観点からします。 計算量とはなんぞやということについては上のスライドを読んでください。 計算量の種類 競技プログラミングで気にする計算量は2種類あります。最悪計算量と償却計算量です。 最悪計算量というのは、ある処理にどのような入力を与えても、それ以上に速い計算量になる、というもので、一種の上界です。競技プログラミングでは作問者が最悪計算量になるテストケースをかならず入れてきますから

    計算量のはなし - 赤い黒歴史を蓄積する
  • 「なぜsetを使っちゃいけないの?」

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

    「なぜsetを使っちゃいけないの?」