技術 ブログ

読書メモ:問題解決力を鍛える!アルゴリズムとデータ構造



ブロックチェーンのノードやDeFiのスマートコントラクトでは、データ構造やアルゴリズムが頻繁に使われています。
例えば、Ethereumではマークルツリーという二分木のデータ構造を用いて、効率的にデータの整合性や改ざんの検知を行っています。また、Solidityで書かれた有名なOpenZeppelinのチェックポイントライブラリでは、二分探索アルゴリズムが利用されています。最近参加したDeFiプロジェクトの監査コンペでは、Fenwick木が使われている場面もありました。

このように、データ構造やアルゴリズムの深い知識がないと、エンジニアやセキュリティリサーチャーとして差別化するのは難しいと感じ、専門的に学ぶために本書を購入しました。

前半ではアルゴリズムの基本から解説されており、計算量やオーダーの概念を含め、O記法、Ω記法、Θ記法のおさらいも丁寧に行われています。さらに、分割統治法、動的計画法、二分探索法、貪欲法といった基本的なアルゴリズムを学んでいきます。

次にデータ構造として、配列、連結リスト、ハッシュテーブル、スタック・キュー、グラフや木、Union-Findなどが扱われています。その後、ソートアルゴリズム(挿入ソート、マージソート、クイックソート、ヒープソート、バケットソート)を学びます。

グラフに関する章も非常に充実しており、グラフ探索、最短経路問題(ベルマン・フォード法、ダイクストラ法、フロイド・ワーシャル法)、最小全域木問題(クラスカル法)、ネットワークフロー(最大流・最小カット問題、フォード・ファルカーソン法)などが丁寧に解説されています。最後には、PとNP、NP困難問題への向き合い方についてのヒントも示されています。

情報系の学部を卒業していない場合、基本情報技術者試験などで知識を補う方も多いと思いますが、資格書籍では扱いきれない手法や実装方法まで含まれているため、自分の知識の抜け漏れを改めて発見するのにも役立ちました。

特にグラフ構造を利用したアルゴリズムが豊富に掲載されている点は、本書の大きなメリットです。また、NP完全性の判定において、他のNP完全問題からその問題がNP完全かどうかを帰着させる方法も非常に勉強になりました。

最後の章では、NP困難な問題を貪欲法などを使って近似する方法が解説されており、難易度は高いですが参考になります。

内容は非常に詰まっており、競技プログラミングの選手のような理解には至らないかもしれません。しかし、完全に理解するには他の書籍も必要ですが、載っているソースコードを少しずつ写経して、最低限実装レベルでアルゴリズムを理解していく予定です。

システムインテグレータや社内ITでのシステム開発では、既存のライブラリやデータベースの機能を利用することが多く、直接アルゴリズムに触れる機会は少ないかもしれません。しかし、ライブラリやプロダクト開発で計算量を意識したタイトな要件や高い効率性が求められる場合には、非常に役立つ内容です。

コメント投稿フォーム

メールアドレスが公開されることはありません。 が付いている欄は必須項目です