マージソートのアルゴリズム解説

#### 目次 - - 図解 - 時間計算量 - アルゴリズムの概要 - コア実装 - 完全な実装コード - テストケース - - - 入力例 - 出力例 図解 時間計算量 n log n アルゴリズムの概要 配列を再帰的に分割し、サイズが1の要素単位に分解していきます。 まず、サイズ1の要素同士を比較し、小さい方を一時配列に格納します。一方の配列が尽き ...

5月26日 10:45 投稿

配列操作と木構造上の色付け問題の解法

配列内要素の隣接関係判定 与えられた配列において、特定の2つの要素xとyが隣接しているかどうかを判定する問題です。 #include<iostream> #include<vector> using namespace std; bool checkAdjacent(vector<int>& arr, int target1, int target2) { int n = arr.size(); for(int i = 0; i < n; i++) { if(arr[i] == target1) { ...

5月26日 06:39 投稿

プログラミングコンテスト問題集(7問)

L1-1 人と神 指定された文字列を直接出力するPHP実装 <?php echo "To iterate is human, to recurse divine."; ?> L1-2 C言語速習 基本数値計算処理の実装例 #include <iostream> using namespace std; void calculate() { int total, studied, hours; cin >> total >> studied >> hours; cout input; int century = input / 100; ...

5月25日 23:04 投稿

アルゴリズムとデータ構造 - 二分探索法の応用

二分探索法 基本概念 二分探索法は情報科学で広く応用されるアルゴリズムの一つです。その核心的なアイデアは各操作で半分の候補を除外することであり、これにより問題の解を \(\text{log}_2n\)(情報科学では通常 \(\text{log}n\) と表記)の操作回数で見つけることができます。 補足:アルゴリズムの計算量 コンピュータは十分速いかもしれないが、無限速ではない。——『 ...

5月25日 17:27 投稿

C言語における挿入ソートの仕組みと最適化実装

挿入ソートの基本概念 C言語における挿入ソート(Insertion Sort)は、小規模なデータや部分的に整列済みのデータに対して高い効率を発揮する整列アルゴリズムである。未整列の要素を順番に取り出し、既に整列済みの領域内で適切な挿入位置を後方から探索して挿入することで、全体の順序を構築していく仕組みを持つ。 標準的な挿入ソートの実装 以下に、挿入ソートの基本 ...

5月25日 04:03 投稿

二分木の深さ優先探索:非再帰アルゴリズムとJava実装

DFS分析 深さ優先探索(DFS)は子ノードを先に訪問し、その後親ノードを訪問する手法です。訪問順序により以下の3種類に分類されます: 前順序(pre-order):根→左→右 中順序(in-order):左→根→右 後順序(post-order):左→右→根 DFS非再帰実装 前順序と後順序 前順序と後順序の実装は類似したロジックで実現できます。前順序訪問は根ノードから開始し、左部分木、右 ...

5月24日 22:35 投稿

Pythonのデータ構造とアルゴリズム - 4 リストのソート - 2 ホームソート、ヒープソート、マージソート

以下は、クイックソートの実装コードです。 # 左側の要素がすでに処理された場合、右側から探してtempより小さい値をleftに配置します。 while right > left: # rightとleftの間に要素がある限りループを続けます while lis[right] >= temp and right > left: # rightの値がtemp以上なら、その値はそのままにしてrightを左へ移動 right -= 1 li ...

5月23日 18:03 投稿

Javaアルゴリズム入門:基本データ構造とコレクション操作

基本フォーマット //Javaプログラムの基本構造 public class AlgorithmBasics { public static void main(String[] arguments) { //変数宣言 int number = 100; long bigNumber = Long.MAX_VALUE - 500L; //出力処理 System.out.print(number); //改行なし出力 System.out.println(bigNumber); //改行あ ...

5月22日 23:00 投稿

Javaリストデータの順列生成アルゴリズム

Javaにおけるリスト要素の順列生成 与えられたリストの全要素を使用する順列(全ての可能な並び順)を生成する方法について解説します。ここでは再帰的アプローチを用いた実装を示します。 実装コード import java.util.ArrayList; import java.util.List; public class PermutationGenerator { public static List<List<Integer>> generateAllPerm ...

5月22日 20:59 投稿

有向無環グラフにおける全経路探索:深さ優先探索による解法

問題概要 ソースからターゲットへの全経路探索という課題では、有向無環グラフ(DAG)において、ソースノード(通常はノード 0)からターゲットノード(通常は最後のノード)へのすべての可能な経路を列挙します。グラフは隣接リスト形式で表され、graph[i] はノード i から直接到達可能なノードのリストを示します。 入出力例 入力: graph = [[1,2],[3],[3],[]] 出力: ...

5月21日 19:35 投稿