配列のビトニック性(Bitonicity)を計算するC++プログラム
配列のビトニック性(Bitonicity)とは?
配列のビトニック性(Bitonicity)とは、隣り合う要素同士を比較した結果をもとに算出される指標です。配列全体が「増加傾向にあるのか」「減少傾向にあるのか」をひとつの数値で表すことができます。
具体的な定義は以下の通りです。初期値を0とし、現在の要素 arr[i] を直前の要素 arr[i-1] と比較することで、値を更新していきます。
Bitonicity = 0 (初期状態:arr[0]) i が 1 から n まで繰り返し: Bitonicity = Bitonicity + 1 ; もし arr[i] > arr[i-1] Bitonicity = Bitonicity - 1 ; もし arr[i] < arr[i-1] Bitonicity = Bitonicity ; もし arr[i] = arr[i-1]
つまり、要素が増加するたびにカウンタが+1され、減少するたびに-1されます。等しい場合は変化しません。ループが終了した時点でのカウンタの値が、その配列のビトニック性となります。
アルゴリズムの考え方
ビトニック性を求めるには、bitonicity という変数を用意し、配列の各要素について「現在の要素」と「直前の要素」の大小関係を比較しながら更新していきます。すべての要素を走査し終えた時点の変数の値が、最終的なビトニック性になります。
例として、配列 {1, 2, 4, 5, 4, 3} の場合を見てみましょう。
- 増加:1→2、2→4、4→5 の3回 → +3
- 減少:5→4、4→3 の2回 → -2
- 結果:3 − 2 = 1
C++による実装例
#include <iostream>
using namespace std;
int main() {
int arr[] = { 1, 2, 4, 5, 4, 3 };
int n = sizeof(arr) / sizeof(arr[0]);
int Bitonicity = 0;
for (int i = 1; i < n; i++) {
if (arr[i] > arr[i - 1])
Bitonicity++;
else if (arr[i] < arr[i - 1])
Bitonicity--;
}
cout << "Bitonicity = " << Bitonicity;
return 0;
}
実行結果
Bitonicity = 1
まとめ
このプログラムは、時間計算量 O(n)・空間計算量 O(1) で配列のビトニック性を効率的に求められます。結果が正の値なら増加傾向が支配的、負の値なら減少傾向が支配的であることを示しており、配列の形状を簡潔に把握するのに役立ちます。
-
C言語で十角形の周囲長を計算する方法を解説
十角形(デカゴン)とは? 十角形(デカゴン)とは、10個の辺を持つ多角形のことで、「10角形」とも呼ばれます。10個の頂点と10本の辺を持ちます。特に正十角形の場合、すべての辺の長さが等しく、それぞれの内角は144度になります。 以下は十角形の図です。 十角形の周囲長を求めるには、次のシンプルな公式を使用します。 周囲長 = 10 × 辺の長さ 計算例 入力:side = 10 出力:十角形の周囲長:100 入力:side = 20 出力:十角形の周囲長:200 アルゴリズム 開始 ステップ1 → 周囲長を求める関数を宣言する void perimeter(int n)
-
C言語で配列を左にn回転させるプログラムの書き方
C言語で配列を左方向にn回転させるプログラムの書き方を解説します。配列の要素を指定した回数だけ左へシフトし、はみ出した先頭の要素を末尾に移動させる「左回転(左ローテート)」の基本的なロジックを、サンプルコードと実行例付きでわかりやすく紹介します。入力と出力の例入力: arr[] = 1 2 3 4 5 6 7 8 9 10N = 3出力: 4 5 6 7 8 9 10 1 2 3アルゴリズムの流れまず、配列 arr に要素を格納します。回転させる回数を変数 N に設定します。「1回分の左回転」をN回繰り返します。1回分の左回転とは、配列の全要素を1つずつ左にずらし、先頭にあった要素を末尾へコピ