PythonでTrie(接頭辞木)を実装する
問題 208:Trie(接頭辞木)の実装
Trie(トライ、発音は「トライ」に近い)または接頭辞木は、文字列のデータセットを効率的に保存および検索するための木構造データ構造です。このデータ構造は、オートコンプリートやスペルチェックなど、多くの応用シーンで使用されます。
以下の操作をサポートする Trie クラスを実装してください。
Trie() - 接頭辞木オブジェク ...
8月1日 06:51 投稿
バックトラック法を用いた組み合わせ合計問題の解法
39. 組み合わせ合計問題(重複選択可)
整数配列candidatesと目標値targetが与えられたとき、配列要素の和がtargetとなる全てのユニークな組み合わせを返します。各要素は無制限に再利用可能です。
入力例: candidates = [2,3,6,7], target = 7
出力例: [[2,2,3],[7]]
解法ポイント:
要素の重複使用を許可するため、再帰呼び出し時にインデックスを進めない
枝刈り処 ...
8月1日 05:05 投稿
eJOI競技プログラミング問題解説
eJOI(European Junior Olympiad in Informatics)の過去問から、いくつかの問題を解説します。
eJOI2017 A - Magic
問題概要
長さ\(n\)の文字列\(a\)が与えられ、使用される文字の種類数を\(|\Sigma|\)とします。部分文字列が「魔法的」であるとは、その部分文字列内に全ての種類の文字が少なくとも1回含まれ、かつ全ての種類の文字の出現回数が等しいことを意味します。 ...
8月1日 00:11 投稿
二つのソート済み配列の中央値を二分探索で求める方法
問題の理解
二つのソート済み配列が与えられた場合、全体の中央値を効率的に見つける必要があります。単純な方法では両方の配列をマージしてから中央値を計算できますが、これではO(m+n)の時間計算量が必要です。より効率的な解法として、二分探索を用いることでO(log(min(m,n)))の時間計算量で解くことができます。
アルゴリズムの考え方
二つの配列から、左半分の要素数 ...
7月31日 01:06 投稿
動的計画法の基礎:バックパック問題の完全解説
動的計画法の基礎:バックパック問題の完全解説
バックパック問題は動的計画法(DP)の最も古典的で基礎的な問題の一つです。多くのアルゴリズム学習者の「必修科目」とも言えるこの問題は、見た目は単純(バックパックに荷物を詰めて価値を最大化する)ですが、01バックパック、完全バックパック、多重バックパックなど多くのバリエーションに派生し、DPの核心思想が体系 ...
7月30日 16:50 投稿
C++スネークゲームにおける衝突判定と成長処理の実装
スネークゲームの根幹となる衝突判定と、蛇が成長する仕組みについて解説する。ここでは、蛇が壁や自身に衝突した場合の判定と、食べ物を摂取した際の体節追加処理を実装していく。
衝突判定を実装するにあたり、蛇の頭部が次に進む座標をあらかじめ計算し、その座標に存在するオブジェクトの種類を調べる手法をとる。この次座標の計算処理を再利用可能にするため、Serpent ...
7月30日 08:57 投稿
アルゴリズム学習ノート:C/C++基礎と基本的なアルゴリズム
1 C/C++の基礎知識
1.1 無限大の定義(INF)
整数型の無限大を表す定数の定義方法:
const int INF = 0x3f3f3f3f;
1.2 scanf関数の使い方
一般的なデータ型のscanfフォーマット指定子:
データ型フォーマット指定子
int%d
long long%lld
float%f
double%lf
char%c
文字列(char配列)%s
1.3 実用的な出力フォーマット
1.3.1 %md
%mdは、int型変数がm桁に満たない ...
7月30日 08:28 投稿
アルゴリズム競技問題集:動的計画法とデータ構造の応用
問題A:連続要素の除去
この問題では、与えられたシーケンスから連続する重複要素を除去する必要があります。
解法:連続する同じ要素を1つにまとめることで、シーケンスの長さを最小化します。
#include <iostream>
#include <vector>
using namespace std;
typedef long long ll;
void process() {
int elements;
cin >> elements;
...
7月29日 16:55 投稿
鋳造炉の容量制約下における最大耐久性の動的計画法
問題定義
特殊な錬成炉を用いて伝説の武器を鍛造する際、計 N 種類の素材を準備します。各素材 i には固有の強度パラメータ A[i] が割り当てられています。錬成規則により、素材は番号順(1 から N まで)に厳密に投入しなければなりません。
炉の容量は最大 W 個の素材までです。ここで重要な操作制限として、新しい素材を投入する直前 に限り、炉内に保管されている素材 ...
7月28日 19:24 投稿
キューを用いた二分木の階層順探索手法
問題定義
二分木の根ノードを入力として、階層順(レベル順)にノード値を探索するアルゴリズムを実装します(各レベルでは左から右へ順にアクセス)。
解法アプローチ
標準的な手法として、キューを用いた幅優先探索(BFS)を適用します。
キューで各階層のノードを管理
各反復処理で現在のキューサイズを取得(現在階層のノード数)
ノードをデキューし、値を記 ...
7月28日 01:04 投稿