・二分探索木 (binary search tree) ・AVL tree ・B-tree ・B+ tree について順を追いながら説明。 流れを細かく書いたので、わかりやすいと思います。
序章 はじめに リバーシのルール ソースコードの記述について 第1章 盤面の処理 1.1 定数と関数の定義 1.2 盤面の生成、初期化 1.3 石を返す処理 1.4 返せる石数を調べる処理 1.5 盤面をコピー、反転させる処理 1.6 その他の盤面処理 1.7 盤面の操作と表示 第2章 ゲーム木と探索 2.1 コンピュータ思考の関数定義 2.2 各関数の実装 2.3 ゲーム木 2.4 MinMax法とNegaMax法 2.5 αβ法 第3章 盤面の評価 3.1 評価関数の定義 3.2 パターンによる局面評価 3.3 評価クラスの構造 3.4 評価クラスの生成とファイルの読み書き 3.5 評価関数の実装 3.6 評価パラメータの更新 3.7 中盤の探索 3.8 自己対局による学習 第4章 性能改善 4.1 石数取得の高速化 4.2 着手の高速化 4.3 候補手リストの導入 4.4 終盤探索の
最適輸送問題(Wasserstein 距離)を解く方法についてのさまざまなアプローチ・アルゴリズムを紹介します。 線形計画を使った定式化の基礎からはじめて、以下の五つのアルゴリズムを紹介します。 1. ネットワークシンプレックス法 2. ハンガリアン法 3. Sinkhorn アルゴリズム 4. ニューラルネットワークによる推定 5. スライス法 このスライドは第三回 0x-seminar https://sites.google.com/view/uda-0x-seminar/home/0x03 で使用したものです。自己完結するよう心がけたのでセミナーに参加していない人にも役立つスライドになっています。 『最適輸送の理論とアルゴリズム』好評発売中! https://www.amazon.co.jp/dp/4065305144 Speakerdeck にもアップロードしました: https
指針 厳密解法に対しては、解ける問題例の規模の指針を与える。数理最適化ソルバーを使う場合には、Gurobi かmypulpを用い、それぞれの限界を調べる。動的最適化の場合には、メモリの限界について調べる。 近似解法に対しては、近似誤差の指針を与える。 複数の定式化を示し、どの定式化が実務的に良いかの指針を示す。 出来るだけベンチマーク問題例を用いる。OR-Libraryなどから問題例をダウンロードし、ディレクトリごとに保管しておく。 解説ビデオもYoutubeで公開する. 主要な問題に対してはアプリを作ってデモをする. 以下,デモビデオ: 注意 基本的には,コードも公開するが, github自体はプライベート そのうち本にするかもしれない(予約はしているが, 保証はない). プロジェクトに参加したい人は,以下の技量が必要(github, nbdev, poetry, gurobi); ペー
電子証明書の暗号化やブロックチェーンは、入力された値からまったく異なる値であるハッシュ値を算出する「ハッシュ関数」によって成り立っています。エンジニアのGreg Walker氏が、代表的なハッシュ関数である「SHA-256」のハッシュ値算出の過程をアニメーションで表示できるプログラム「SHA-256 Animation」を公開しています。 GitHub - in3rsha/sha256-animation: Animation of the SHA-256 hash function in your terminal. https://github.com/in3rsha/sha256-animation 実際にプログラムを動かしてみたムービーが以下のものです。 ハッシュ値が生成される様子を「SHA-256 Animation」で観察するとこんな感じ - YouTube プログラムを動かす
こんにちは。倉内です。 プログラミング学習をしていると「アルゴリズム」という単語を聞くことがあると思いますが、いつかしっかり勉強しようと思いつつ手を出せていない方も多いのではないでしょうか。 アルゴリズムは独学では少々とっつきにくい分野ですが、アルゴリズムの知識があれば、よりパフォーマンスが高い処理を実現することができます。 特に大量のデータを扱う場合は、ループを何重にも回すなどの単純処理では途方もない処理時間がかかるため、効率のよい方法を採用する必要があります。 そこで今回は「アルゴリズムとはなにか?」から始まり、データ探索を例にアルゴリズムの基本を説明していきます。Pythonで実際のコードも書いてみますので、ぜひご自分でも実行して試してみてください。 なぜアルゴリズムを学ぶのか アルゴリズムの基本 データ構造を知ろう 配列 スタックとキュー 木構造(ツリー構造) 探索アルゴリズム 線
こんにちは!MLエンジニアのたかぱい(@takapy)です。 今回は、ママリのアプリ内にレコメンドエンジンを導入したので、導入までの取り組みやアーキテクチャについてご紹介できればと思います。 目次 ママリ内での課題 アーキテクチャ概要 EDAとアルゴリズムについて オフライン検証の失敗と学び A/Bテストについて レコメンドアルゴリズムについて 強調フィルタリング(アイテムベース) Matrix Factorization 最後に ママリ内での課題 ママリはサービスとして6年目を迎え、サービスの成長とともにアプリ内の記事数も増えており、それに伴いユーザーが本来欲しい情報にたどり着くことも難しくなってきました。 加えて「子育て層のユーザー」という切り口1つとっても、0才児のママと1才児のママでは悩みや欲しい情報がまったく異なります。 このような背景から、これまで人的に行っていたルールベースで
実録パフォーマンス改善 - 高速化のためアーキテクチャやアルゴリズム選択から見直すSansanの事例 インフラの特性をふまえ、ミドルウェアの挙動を理解し、プロファイリングによってボトルネックを把握し、要求に合ったアーキテクチャを選択する。そういった工夫を重ねることでアプリケーションのパフォーマンスを改善する事例を、Sansanの千田智己さんに聞きました。 アプリケーションの設計・実装方法を変えることで、性能が格段に向上するケースは数多くあります。有名IT企業のエンジニアは、どのような方針のもとでアーキテクチャあるいはアルゴリズム選択などでパフォーマンスを改善しているのでしょうか? 法人向けクラウド名刺管理サービス「Sansan」や個人向け名刺アプリ「Eight」を提供するSansan株式会社の千田智己さんに、これまで取り組んできた事例と、そのノウハウを教えていただきました。 千田 智己(せ
画像処理が初めての人のための問題集をつくったりました。(完成!!) 研究室の後輩用に作ったものです。 自然言語処理100本ノックがあるのに、画像処理のがなかったので作ってみました。 あくまで趣味ベースで作ったものなので、プルリクエストは受け付けてますが依頼などは一切受け付けません そこをご理解頂けた方のみご利用下さい 画像処理の基本のアルゴリズム理解につながると思います。 pythonのnumpyの練習にもなると思います。(2019.3.8 C++もつくってますーー) ぜひぜひ下のgitをやってみてください。 [HP]https://yoyoyo-yo.github.io/Gasyori100knock/ [Git]https://github.com/yoyoyo-yo/Gasyori100knock ★追記 2020.5.8 環境構築の手間をなくすために、Google Colabに修正
by geralt 「AI」と「機械学習」の2つは並列して使用されることが多いものですが、両者はまったく異なるものを指します。AIと機械学習はどのように違うのか、そしてしばしば両者が同時に使われるのはなぜなのかを、ソフトウェアエンジニアのBen Dickson氏が解説しています。 Why the difference between AI and machine learning matters | TechTalks https://bdtechtalks.com/2018/10/08/artificial-intelligence-vs-machine-learning/ 「機械学習と高度な人工知能(AI)を使って何百ものデータを収集・解析してモバイルアプリのユーザーエクスペリエンスを改善」といった文言を、テクノロジーを利用する製品やウェブサイトで見かけたことがある人も多いはず。しかし
仕事ではじめる機械学習を購入したので早速読んでみた。 知ってる箇所とか結構流したとこもあるので雑なメモです。 第Ⅱ部に関しては特に読んでないとこ多いのだが、手を動かさないと意味ないしまた休日にでもやってみます。 第Ⅰ部 1章 機械学習プロジェクトのはじめ方 まずは機械学習を使わないで解決できないか考える 序盤でこの1文が出てきて信用できる本だとわかった すぐに結果がでないことが多いのでそれに投資できる/させる調整が必要そう 解くべき問題の仮設設定とMVP検証を必ずやる 成功させるには以下のメンバーが必要 ドメイン知識のあるメンバー・機械学習する人・データエンジニア・失敗を恐れない理解有る責任者 テストがしずらいので継続的にモニタリングして性能の評価をするべし 2章 機械学習で何ができる? p22のどのアルゴリズムを選ぶべきかのフローチャート図が便利 これの簡略版 分類・回帰・クラスタリング
はじめに はじめまして。 NTTデータ数理システムでリサーチャーをしている大槻 (通称、けんちょん) です。 C や C++ を使用しているとしばしばビット演算を行う場面が出て来ます。 計算機リソースが限られている状況では、ビットを用いることでデータ量を少なく済ませたり、計算コストを小さく抑えたりすることができるメリットがあります。 本記事では、ビット演算を用いて実現できる処理について、簡単なものから高度なものまで集大成します。極力わかりやすく頑張って執筆しました。特に前半 4 つはビットの説明の中でもかなりわかりやすい方だと思います。後半の 7 つのテーマは比較的高度なアルゴリズムの話題ですので、フラグ管理やマスクビットについて詳しく学びたい方は前半 4 つを中心に読んでいただいて、後半 6 つは必要に応じて読んでいただければと思います。反対にビットの知識はあってビットを用いたアルゴリズ
ゲームなどのコンテンツにおいて、「当たり判定」から逃れることはできません。オブジェクトとオブジェクトが衝突したかどうかという判定は、インタラクティブコンテンツにおいて最も重要な部分になるからです。 当たり判定の実装自体は難しくありません。ですが、素朴な実装ですと、対象となるオブジェクトが大量である場合に、十分なパフォーマンスが出ません。これはオブジェクトの多い、現代的なゲームでしたり、弾幕シューティングなどを作るときに大きな障害となります。 この記事では、大量のオブジェクトの当たり判定を処理する、効率的な方法について紹介します。 まずは素朴に実装してみる 当たり判定の処理を語るには、ある程度ゲームの骨組みのようなものが必要になってきます。もちろんクラスなどを使わないベタ書きでもよいのですが、大変読みにくくなってしまいます。ですので、今回は、まず簡易的なゲームエンジンのようなものを作って、そ
チェックデジットの計算方法 桁数の多い数字を扱う場合、誤り検知用にチェックデジット(検証番号)といわれるものがあります。大抵は末尾についていたりします(末尾以外にある場合もあります)。 いくつか計算方法をメモしておきます。 以下の計算の元になる数値は、チェックデジットを除いたものです。 実運用上は、少しだけ違う変形版のチェックデジットが使われていることがあります。 参考 モジュラス10 ウェイト2・1分割(Luhn formula) 数値の各桁に、下の桁から2・1・2・1・…の順番に係数(ウェイト)を掛けます。 各桁の結果が2桁の場合には、十の位と一の位を分けて足し合わせます(分割)。 それぞれの合計を求めます。 合計を10で割り、余りを求めます(モジュラス)。 この余りを 10 から引いたもの(10 - 余り)がチェックデジットです。ただし余りが0の場合はチェックデジットも「0」になりま
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く