Dijkstra法による最短経路探索

Dijkstra法はグラフ理論において単一始点最短経路問題を解決するための代表的なアルゴリズムです。非負重み付きグラフの最短経路計算に特化したこのアルゴリズムは、貪欲法の一種として分類されます。 アルゴリズム概要 適用範囲: 非負重み付き有向グラフ/無向グラフにおける最短経路探索 計算量: 隣接行列実装の場合O(V²)、優先度付きキュー使用でO((E+V)logV) 特徴 ...

7月21日 01:28 投稿

ZooKeeper 3.8.4 の導入と C API のビルド手順

ダウンロード wget https://dlcdn.apache.org/zookeeper/zookeeper-3.8.4/apache-zookeeper-3.8.4.tar.gz tar -zxvf apache-zookeeper-3.8.4.tar.gz cd apache-zookeeper-3.8.4 直接使用 cd conf cp zoo_sample.cfg zoo.cfg # サンプル設定ファイルをコピーして使用 cd ../bin/ ./zkServer.sh start # サーバーを起動 ./zkServer.sh status # サーバーの状態を確認 C API ...

7月20日 01:48 投稿

Qt での HTTP クライアントおよびサーバー実装

HTTP プロトコルの概要 HTTP(HyperText Transfer Protocol)は、クライアントとサーバー間でリクエストとレスポンスを交換するためのプロトコルであり、通常は TCP 上で動作します。このプロトコルは、Web ブラウザとサーバー間の通信ルールを定義し、情報の送受信を標準化します。 HTTP の基本的な処理フローは以下の通りです: クライアントがサーバーとの TCP 接続 ...

7月20日 00:38 投稿

C++における抽象クラス、テンプレート、スマートポインタの実践的応用

抽象基底クラスを定義し、派生クラスで具象化することで多態性を実現する設計パターンは、C++におけるオブジェクト指向の核心です。以下では、出版物管理システムを例に、継承と仮想関数の適切な使い方を示します。 // base_item.hpp #pragma once #include <string> class MediaItem { protected: std::string title_; public: explicit MediaItem(const ...

7月19日 23:34 投稿

Codeforces Round #671 (Div. 2) 主要問題のアルゴリズム解法と実装

A - Digit Game 正整数 $n$ が与えられたとき、先手は奇数インデックスの位置、後手は偶数インデックスの位置を交互に消去していく。最後に残った数字の奇偶性によって勝者が決定する。二人が最適に行動する場合の勝者を判定する。 最後に残る位置は $n$ の偶奇によって一意に定まる。$n$ が奇数の場合は先手が制御する位置(0-indexed で偶数インデックス)、$n$ が偶数の ...

7月19日 20:58 投稿

C++における型安全な動的データ格納の実現

Boost.Anyの概要と目的 C++において任意の型のデータを単一の変数内に安全に格納するためのライブラリであるBoost.Anyについて考察します。 従来のアプローチとその問題点 Boost.Anyを使用しない場合の一般的な解決策としてvoid*ポインタの使用があります。 void* raw_data = new int(100); int extracted_value = *reinterpret_cast(raw_data); delete reinterpret_cas ...

7月19日 18:18 投稿

モンドの冒険者たちのゲーム

問題説明 モンドの街の冒険者たちは、風神祭を祝うため特別なパフォーマンスを計画しています。このパフォーマンスには「冒険者の塔」という特殊な挑戦が含まれており、これは冒険者たちのチームワークと個人の耐久力を試す活動です。 「冒険者の塔」パフォーマンスでは、参加者は互いの肩の上に立ち、人間の塔を形成し、その勇気とチーム精神を示す必要があります。各冒険 ...

7月19日 00:47 投稿

配列内の重複要素を特定するアルゴリズム

以下は、C++における配列サイズの取得に関するコード例である。関数に渡された配列はポインタに変換されるため、sizeof演算子は元の配列サイズではなくポインタのサイズ(通常4または8バイト)を返す点に注意が必要である。 #include <cstdio> size_t get_array_size(int arr[]) { return sizeof(arr); // 実際にはポインタのサイズが返される } int main() ...

7月18日 21:11 投稿

C++文字列操作マスタリ

基本操作 str.size(); || str.length();//文字列の長さを返す str1.swap(str2); || swap(str1, str2);//str1とstr2を交換(前者推奨) str.substr(pos, len);//pos位置からlen文字の部分文字列を取得 reverse(str.begin(), str.end());//文字列を反転 string str(count, ch);//ch文字をcount回繰り返した文字列を生成 sort(str.begin(), str.end());//文字列をソート 代入 ...

7月18日 19:48 投稿

動的計画法における最長増加部分列モデル

動的計画法を用いた最長増加部分列(LIS)のアルゴリズムとその応用について解説します。最長増加部分列は、与えられた数列の中から単調に増加する部分列の中で最も長いものを求める問題です。このモデルは、様々な最適化問題に応用可能です。 最長増加部分列の基本概念 最長増加部分列問題は、与えられた数列において、各要素が前の要素よりも大きくなるように選んだ部分 ...

7月18日 19:13 投稿