アルゴリズム

[Python] M系列法で乱数を生成する方法

M系列法(最大長系列法)は、線形帰還シフトレジスタ(LFSR)を用いて擬似乱数を生成する方法です。 PythonでM系列法を実装するには、LFSRをシミュレートする必要があります。 具体的には、初期状態(シード)とフィードバック多項式を設定

続きを読む »
アルゴリズム

[Python] LZ圧縮(LZ77/LZ78/LZD)アルゴリズムを実装する方法

LZ圧縮アルゴリズムは、データの繰り返しパターンを利用して圧縮を行います。 LZ77はスライディングウィンドウを使用し、過去のデータから一致する部分を参照します。 LZ78は辞書ベースで、データの新しいパターンを辞書に追加し、辞書のインデッ

続きを読む »
アルゴリズム

[Python] n王妃(エイトクイーン)の問題のすべての解を求める方法

n王妃問題は、n×nのチェス盤にn個のクイーンを互いに攻撃し合わないように配置する問題です。 Pythonでこの問題を解くには、バックトラッキングを用いるのが一般的です。 バックトラッキングでは、1行ずつクイーンを配置し、配置が有効かどうか

続きを読む »
アルゴリズム

[Python] ハフマン符号化圧縮アルゴリズムを実装する方法

ハフマン符号化は、データ圧縮のための可変長符号を生成するアルゴリズムです。 頻度の高い文字に短いビット列、頻度の低い文字に長いビット列を割り当てることで、全体のデータサイズを削減します。 Pythonで実装するには、まず文字の出現頻度をカウ

続きを読む »
アルゴリズム

[Python] マッカーシーの91関数の計算を実装する方法

マッカーシーの91関数は、再帰的な関数で、特定の条件に基づいて値を返します。 関数は次のように定義されます: \( n > 100 \) の場合、 \( M(n) = n – 10 \) \( n \leq 100 \)

続きを読む »
アルゴリズム

[Python] ホーナー法で多項式の計算を高速化する方法

ホーナー法は、多項式の計算を効率化するためのアルゴリズムです。 通常の多項式の計算では、各項を個別に計算して足し合わせますが、ホーナー法では多項式を次のように変形します: \[P(x) = a_n x^n + a_{n-1} x^{n-1}

続きを読む »
アルゴリズム

[Python] エラストテレスのふるいアルゴリズムを実装する方法

エラトステネスのふるいは、指定した範囲内の素数を効率的に見つけるアルゴリズムです。 Pythonで実装するには、まず2から指定した最大値までのリストを作成し、2から順にその倍数をリストから削除していきます。 具体的には、リストの各要素を順に

続きを読む »
アルゴリズム

[Python] ISBN番号の計算・書籍情報を取得する方法

ISBN番号の計算は、ISBN-10とISBN-13の2種類があります。 ISBN-10は9桁の数字にチェックディジットを加えた10桁の番号で、チェックディジットは以下の式で計算されます: \[\text{チェックディジット} = (10

続きを読む »
アルゴリズム

[Python] ハミング距離を計算する方法

ハミング距離は、2つの同じ長さのビット列や文字列の異なる位置の数を表します。 Pythonでハミング距離を計算するには、2つの文字列を比較し、異なる位置の数をカウントします。 ビット列の場合、XOR演算を使用して異なるビットを特定し、その結

続きを読む »
アルゴリズム

[Python] フーリエ変換(FFT)を行う方法

Pythonでフーリエ変換を行うには、NumPyライブラリのnumpy.fftモジュールを使用します。 特に、高速フーリエ変換(FFT)を行うにはnumpy.fft.fft関数を使います。 入力データは通常、時間領域の信号であり、fft関数

続きを読む »
アルゴリズム

[Python] 簡単なB木から実装方法をわかりやすく解説

B木は、データを効率的に管理するための自己平衡二分探索木の一種で、特にデータベースやファイルシステムで使用されます。 PythonでB木を実装する際、まず「ノード」クラスを作成し、各ノードが複数のキーと子ノードを持つようにします。 B木は、

続きを読む »
アルゴリズム

[Python] 連長圧縮(ランレングス圧縮)を実装する方法

連長圧縮(ランレングス圧縮)は、連続する同じデータを1つのデータとその繰り返し回数で表現する手法です。 Pythonで実装するには、文字列やリストを走査し、連続する要素をカウントして結果を保存します。 具体的には、入力データを1文字ずつ確認

続きを読む »
アルゴリズム

[Python] 誤り検出符号の生成・チェックを行う方法

誤り検出符号は、データ通信やストレージでデータの整合性を確認するために使用されます。 Pythonでは、CRC(巡回冗長検査)やハミング符号などのアルゴリズムを用いて誤り検出符号を生成・チェックできます。 標準ライブラリのbinasciiモ

続きを読む »
アルゴリズム

[C言語] ドラゴン曲線を計算するプログラムを実装する方法

ドラゴン曲線は、再帰的なフラクタル図形の一種で、C言語で実装するには再帰的なアルゴリズムやLシステムを使用する方法が一般的です。 まず、ドラゴン曲線の生成ルールを定義し、再帰的に左右の折り返しを計算します。 次に、タートルグラフィックスのよ

続きを読む »
アルゴリズム

[C言語] トポロジカルソートを実装する方法

トポロジカルソートは、有向非巡回グラフ(DAG)の頂点を、すべての辺が順方向になるように並べる手法です。 C言語で実装するには、主に以下の手順を踏みます。 まず、グラフを隣接リストや隣接行列で表現します。 次に、各頂点の入次数を計算し、入次

続きを読む »
アルゴリズム

[C言語] ハノイの塔を解くプログラムの作成方法

ハノイの塔は、再帰的なアルゴリズムを用いて解くことができます。 C言語での実装では、まず3つの棒(A, B, C)と複数の円盤を扱います。 基本的な考え方は、n枚の円盤をAからCに移動する際、n-1枚を一時的にBに移動し、最後の1枚をCに移

続きを読む »
アルゴリズム

[C言語] はさみうち法(非線形方程式)を実装する方法

はさみうち法(または二分法)は、非線形方程式の解を数値的に求める手法です。 C言語で実装する際の基本的な流れは次の通りです。 まず、解を含む区間 \([a, b]\) を設定し、関数 \(f(x)\) の符号が \(f(a)\) と \(f

続きを読む »
アルゴリズム

[C言語] ナップザック問題を動的計画法で解く方法

ナップザック問題を動的計画法で解く方法は、与えられた容量のナップザックに対して、アイテムの価値を最大化する方法を求めるアルゴリズムです。 まず、アイテムの重さと価値のリストを用意し、2次元の配列を使って部分問題を解きます。 配列の各要素は、

続きを読む »
アルゴリズム

[C言語] フラクタル圧縮を用いた画像圧縮方法

フラクタル圧縮は、自己相似性に基づく画像圧縮技術です。 画像内の部分領域が他の領域と類似している性質を利用し、これを数学的に表現することでデータを圧縮します。 具体的には、画像を小さなブロックに分割し、それぞれのブロックが他のブロックの縮小

続きを読む »
Back to top button