C言語における挿入ソートの仕組みと最適化実装
挿入ソートの基本概念
C言語における挿入ソート(Insertion Sort)は、小規模なデータや部分的に整列済みのデータに対して高い効率を発揮する整列アルゴリズムである。未整列の要素を順番に取り出し、既に整列済みの領域内で適切な挿入位置を後方から探索して挿入することで、全体の順序を構築していく仕組みを持つ。
標準的な挿入ソートの実装
以下に、挿入ソートの基本 ...
5月25日 04:03 投稿
Codeforces 920 (div3) 解法まとめ
問題 A - Codeforces
入力された四つの座標から、正方形の面積を求める問題です。各辺が軸に平行な正方形かどうかを判定し、辺の長さを計算して面積を求めます。
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
int main()
{
int cases;
cin >> cases;
while(cases--)
{
int x1, y1, x2, y2, x3, y3, x4, y4;
...
5月25日 02:21 投稿
接尾辞配列とその応用
接尾辞配列
単一文字列の部分文字列に関する辞書順問題に一般的に利用できます。
アルゴリズムの流れ
まず、文字列のすべての接尾辞をソートします。
定義:\(sa[i]\) はすべての接尾辞をソートした後、第 \(i\) 番目に小さい接尾辞のインデックスを表します。\(rk[i]\) は接尾辞 \(i\) のランクを表します。
倍増法と基数ソート(\(O(n\log n)\))を採用します(簡略化/エ ...
5月23日 21:50 投稿
LinkedList ソースコード解析
内部構造と特徴
LinkedList は内部的にダブルリンクリスト(双方向リスト)によって実装されており、List インターフェースと Deque インターフェースの両方を実装しています。このため、LinkedList はリストとして扱うことができるだけでなく、キュー(Queue)やスタック(Stack)としても利用可能です。
ただし、スタックやキューとして使用する場合には ArrayDeque の使 ...
5月23日 21:39 投稿
データ構造の基礎:配列、リンクリスト、スタック、キューの実装
配列(シーケンシャルリスト)
配列は連続したメモリ領域にデータを格納するデータ構造です。C言語環境では、名前付きのスタック配列または匿名のヒープ配列として実装できます。
配列の設計
配列を操作しやすくするために、専用の「管理構造体」が必要です。この構造体には通常以下の要素が含まれます:
配列の総容量
現在の最後の要素のインデックス位置
配列へのポイ ...
5月23日 18:40 投稿
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 投稿
Guava Tableを用いた多次元データ構造の実装
多次元データ管理の基本概念
標準的な二次元テーブルは行と列の交差点で値を管理しますが、現実のデータモデルでは三つ以上の次元(例:時間・地域・製品カテゴリ)が必要となるケースが頻繁に発生します。GuavaのTableクラスはネイティブで多次元をサポートしませんが、適切なネスト構造を用いることでこの制限を克服できます。
Tableのネストによる三次元構造
Tableイン ...
5月23日 00:18 投稿
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 投稿
CSP-Sで出題される可能性のあるテンプレート集(非原创、各所からまとめ)
CSP-Sの点数を上げるためのテンプレート集
数学
高速累乗
int pow_mod(int base, int exp) {
int result = 1;
while (exp > 0) {
if (exp & 1) result = (result * base) % MOD;
base = (base * base) % MOD;
exp >>= 1;
}
return result;
}
ルーカスの定理(逆元の線形計算付き)
int inv[N], fact[N], fact_inv[N ...
5月22日 01:39 投稿
『データ構造』課程設計(C/C++版):植物百科データの管理と分析
目次
第1関:植物情報の追加
第2関:植物情報の削除
第3関:植物情報の変更
第4関:順序表に基づく順次探索
第5関:連結リストに基づく順次探索
第6関:順序表に基づく二分探索
第7関:二分探索木に基づく探索
第8関:オープンアドレス法に基づく ...
5月21日 18:00 投稿