二分探索木 - Rustではじめるデータ構造とアルゴリズム(第2回)

簡単な二分探索木

Rustの特徴のひとつは、所有権(ownership)・移動(move)・借用(borrow)の概念です。これらがコンパイル時に厳格にチェックされることにより、古くから未定義挙動でプログラマを悩ませてきたダングリングポインタなどの問題がなくなり、メモリ安全性がもたらされます。

しかし一方で、自分で多少複雑なデータ構造を定義しようとする場合にはコンパイルを通すだけでもかなりの知識・力量が要求されます。

この(不定期)連載では、 Rustではじめるデータ構造とアルゴリズム と題し、プログラミングコンテストなどでよく見かける基礎的なデータ構造とアルゴリズムを、できるだけシンプルにRustで実装していきます。 &, &mut, Box, Rc, Cell, RefCell などの使い分けや、なぜそれを使う必要があるかの解説を、実例を通して行います。

今回第2回では、 二分探索木 を取り扱います。値の大小に沿った構造を持つ二分木であり、単純なデータ構造でありながら、検索やソートなど実用性が高いです。第1回の二分木に少し制約を付け足した構造になるので、未読の方はぜひ第1回のほうからご覧ください。

続きを読む


二分木 - Rustではじめるデータ構造とアルゴリズム(第1回)

簡単な二分木(引用元: Wikipedia)

Rustの特徴のひとつは、所有権(ownership)・移動(move)・借用(borrow)の概念です。これらがコンパイル時に厳格にチェックされることにより、古くから未定義挙動でプログラマを悩ませてきたダングリングポインタなどの問題がなくなり、メモリ安全性がもたらされます。

しかし一方で、自分で多少複雑なデータ構造を定義しようとする場合にはコンパイルを通すだけでもかなりの知識・力量が要求されます。

この(不定期)連載では、 Rustではじめるデータ構造とアルゴリズム と題し、プログラミングコンテストなどでよく見かける基礎的なデータ構造とアルゴリズムを、できるだけシンプルにRustで実装していきます。 &, &mut, Box, Rc, Cell, RefCell などの使い分けや、なぜそれを使う必要があるかの解説を、実例を通して行います。

第1回は、最もシンプルな木構造である 二分木 を取り扱います。基礎的な木構造なので、再帰・深さ優先探索・幅優先探索のエッセンスを集中的に理解することが期待できます。

各回共通し、以下のような構成を予定しています。

  1. データ構造の説明と、Rustでの定義
  2. 関連するアルゴリズムの説明と、(汎用的に実装できる場合は)Rustでの実装
  3. 定義したデータ構造とアルゴリズムを使って、プログラミングコンテストの問題を解いてみる

続きを読む


プレイイングマネージャーのポテンシャルエナジー理論

全世界のプレイングマネージャーに捧ぐ・・・

自分自身がプレイングマネージャー的な役割をこなす場面があるときに、「プレイヤー仕事たのし〜」「マネージメント仕事戻るの気が重いよ〜〜」となることがあります。多々あります。
そんな自分を慰めるために、自分の心に秘めた独自理論があります。名付けて

です。
一生自分の胸だけに秘めるつもりだったのですが、同僚と1on1してポロッと話してみたら意外とウケたので、増長してブログに書きました。

続きを読む



Backlog Worldにブログレポーター枠で参加しました

Backlog Worldにブログレポーター枠で参加しました

2018/02/18に開催された Backlog World にブログレポーター枠として参加してきました。

■ Backlog Worldとは?

Backlog Worldは、プロジェクト管理に関わる全ての方のための祭典です。一言でプロジェクト管理と言っても、業種や職種、チームの規模、プロジェクトの期間などは様々。それでも、どんなプロジェクトでも、「仲間とコラボレーションしてプロジェクトを進める」ということは必須です。

Backlog Worldでは、どのようにプロジェクト管理を行なっているのか、様々な立場の方による知見のシェアが行われます。実例に基づいたセッションの中に、あなたのチームで取り入れられるヒントがきっとあるはず。

この記事では自分の参加したセッションに触れ、その中でも特に印象に残った「アジャイル開発とプロジェクト管理ツールの相性」のセッションについて詳しく感想を書きます。

続きを読む


Amazon EC2でクライアント証明書認証のVPNを構築

構成図

高いセキュリティが要求されるLAN内のサーバに自宅などのリモートからSSHログインしたい場合、VPNが有効です。
VPNを使うと、リモートからLAN内に仮想的に参加することができるので、プライベートIPアドレスのみが割り振られたサーバにもSSHログインできるようになります。

VPNには色々な認証方式がありますが、SSL-VPNプロトコルでクライアント証明書方式の認証を行えば、誰がいつVPNに参加したのかを高い信頼度でログに記録することができます。

本記事では、OpenVPNを使ったSSL-VPNの構築方法をAmazon EC2での構築も踏まえ詳しく紹介します。

続きを読む


はてなブログからgithub.ioに移転しました

http://laysakura.hateblo.jp から移転しました。

今後は Hexo を使って github.io 上に記事を掲載していきます。

過去の人気記事

はてブの比較的多かった過去の記事をピックアップしました。

これらの記事はこちらのブログに転載し、元のはてなブログの記事からもこちらのブログへのリンクだけを残します。


速いしスケールする並列CSVパーサ作った紆余曲折話

年の瀬にどうしてもCSVを並列にパースしたくなって、PartialCsvParserというC++のライブラリを作った。

  • 1スレッドでも高速だし複数スレッドで使うとちゃんとスケールする
  • ヘッダファイルだけインクルードすればコンパイルなしで使える
  • パブリックドメインなので自分のリポジトリに git add とかしてもおk

という3拍子揃ったやつです。

細かいことはプロジェクトのページを見ていただくとして、ブログには頑張ってベンチマークとった話と、全然スケールしなかったのに2行追加しただけでグンと並列性能が上がった話を書く。

続きを読む


MySQLite: SQLiteデータベースを読み書きするMySQLストレージエンジン

第2回 MariaDB/MySQL コミュニティ イベントで、以前作っていたMySQLiteというMySQL/MariaDBのストレージエンジンの発表をしました。

スライドはこちらです。

MySQLite: SQLiteデータベースを読み書きするMySQLストレージエンジン

他の方の発表も楽しめました。
懇親会でMariaDB開発・セールスのおじさま方に「You look so cool!」って言われたのが一番嬉しかったです。

お話を持ちかけてくれたり会場を提供してくださったDeNA様、ありがとうございました。