C言語による多分木の実装と可視化機能

多分木データ構造は様々な応用分野で利用されますが、実装方法は使用目的によって大きく異なります。本実装は組み込みシステム向けに設計されたシンプルな多分木で、スレッド管理などの用途を想定しています。 データ構造定義 #define MAX_CHILDREN 32 #define NODE_NAME_LENGTH 32 typedef struct tree_node { long identifier; struct tree_node* parent_ptr; ...

6月26日 16:56 投稿

Binary Indexed Tree の基礎と応用

概要 Binary Indexed Tree(BIT)は、単点更新と区間クエリを効率的に処理できるデータ構造です。計算量 O(log N) で操作を実行可能であり、競技プログラミングやアルゴリズム最適化で広く利用されます。 構造と原理 BIT は 2 進数表現に基づく構造を利用します。任意の整数は複数の 2 のべき乗和で表せることから、配列要素をべき乗区間で管理します。lowbit 演算(x & - ...

6月25日 18:51 投稿

Pythonにおける木構造の実装と応用

Pythonにおける木構造の実装と応用 木構造の基本概念 木構造は階層的な関係を模倣するデータ構造で、各要素はノードと呼ばれます。木の各ノードはゼロ個以上の子ノードを持つことができますが、各ノードは親ノードを一つしか持たない、という特徴があります。ルートノードだけは親ノードを持たない例外です。木構造の重要な特性は、循環がないことです。つまり、あるノー ...

6月24日 16:08 投稿

再帰関数の設計手法

1. はじめに 再帰は、関数型言語のみならず、あらゆるプログラミングパラダイムにおいて極めて重要な概念である。本稿では、数学的帰納法との関連性を踏まえながら、再帰関数の設計手法について体系的解説していく。 2. 再帰と数学的帰納法 2.1 数学的帰納法の原理 数学的帰納法は、自然数に関する命題を証明するための手法である。その原理は以下の2つのステップから ...

6月22日 22:05 投稿

Pythonプログラミングの基礎知識

インストール 変数と単純なデータ型 コメント # 1行コメント 変数 変数はデータを識別するためのラベルです。 Pythonでは変数宣言が不要です 変数命名ルール Pythonの変数名はアルファベット、数字、アンダースコアのみ使用可能です。 変数の使用 greeting = "こんにちはPython世界" print(greeting) 複数変数に同時代入 a,b,c=10,20,30 print(a,b,c) 定数 ...

6月21日 22:46 投稿

JavaにおけるHashMapとArrayListの基本的な操作方法

Javaコレクションフレームワークの概要 Javaのコレクションフレームワークは主に以下の2つのカテゴリに分類されます: Collectionインターフェース: 単一要素のコレクション Listインターフェース: 順序あり、重複可能なデータ → ArrayList, LinkedList, Vector Setインターフェース: 順序なし、重複不可のデータ → HashSet, TreeSet, LinkedHashS ...

6月20日 00:21 投稿

二分木の基本操作と実装

二分木の基礎知識(概念、特性、走査方法)について前回の記事で学びました。今回は主にコードの実装に焦点を当てます。 目次 二分木の疑似作成 二分木の走査 二分木のノード数の取得 二分木の葉ノード数の取得 二分木の第Kレベルのノード数の取得 二分木の高さの取得 二分木での要素検索 二分木の疑似作成 なぜ疑似作成と呼ぶのでしょうか。二分木の作成は非常に複雑なプ ...

6月17日 16:41 投稿

Pythonリストの基本操作と使い方

要素の検索と確認 index(x) は、リスト内で最初に見つかった値 x のインデックスを返します。 items = ['apple', 'banana', 'cherry'] print(items.index('banana')) # 出力: 1 count(x) は、リスト内に含まれる値 x の出現回数を返します。 values = [1, 2, 2, 3, 2, 4] print(values.count(2)) # 出力: 3 in 演算子は、指定した要素がリストに存在するかどうかを真 ...

6月16日 23:53 投稿

データ構造アルゴリズム学習ノート

データ構造 単方向連結リストの操作 // 初期化 void initialize() { top = -1; // リストの先頭を-1に設定 counter = 0; // 使用中のインデックスカウンター } // 先頭に要素を挿入 void insert_at_top(int value) { elements[counter] = value; // 値をカレントノードに格納 next_pointers[counter] = top; // カレントノードの次を現在の先頭に ...

6月16日 18:20 投稿

競技プログラミングコンテスト問題の解法解説

円周率日チャレンジ Pythonの高精度計算を活用する問題。浮動小数点数の精度問題を回避するため、整数演算で処理する。 n = int(input()) pi_value = 31415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679 results = [] for _ in range(n): numerator, denominator = map(int, input().split()) approx = nume ...

6月15日 16:47 投稿