第七章日常コードにおけるbigo
26510 ワード
*サムネイルはThumbnail-Maker by oneookです.
第七章日常コードにおけるbigo
7.1偶数の平均値整数配列のすべての偶数の平均値を計算するアルゴリズム データ要素Nはメソッド伝達の配列数 である.偶数日は1)偶数,2)sum増加,3)countOfEvennumers増加−第3期 奇数が1)偶数確認->第1期 for文のほか,1)sum初期化,2)countOfEvennumbers初期化,3)sum/countOfEvennumbers計算->3段階 の最悪のシナリオ(すべての偶数)では、3 N+3フェーズ->O(N) 7.2単語ジェネレータ文字配列におけるすべての二文字文字文字列の組合せを集約するアルゴリズム. ネストリングアレイのデータ要素N*Nフェーズ->O(N)²) の3文字の組み合わせ、for文が3回重なる->O(N)³) 7.3シナリオ例アレイの前、中、後の値をサンプリングするアルゴリズム Nは配列中の要素数 である. Nでも Nでも、常に第3ステップ(前、中、後の値を格納)->O(1) を実行する.
7.4平均摂氏度を求める華氏温度基準の摂氏平均値を求めるアルゴリズム. 華氏度を摂氏度に変換する過程はN段階 である.℃の平均温度を求めるために、さらなるプロセスはN段階 である. N+N=2 Nフェーズ->O(N) オーバーラップリングはN*N、O(N)²)2個の独立ループ(N+N)がO(N) 7.5服装商標件のシリアル番号を受信し、1〜5のサイズを追加することによって商標テキストシーケンスを作成するアルゴリズム. Nは服装品種配列の元素数 である.はドアの重なりであるが、外側forドアはN回、内側forドアは5回N*5=5 Nステップ->O(N) を繰り返す
7.61世紀という番号の内部アレイサイズの異なる2次元アレイを返すアルゴリズム. Nはアレイ全体の要素数 である.
ドアはネストされていますが、実際には要素全体を巡る->O(N) です.
7.7パリントロム検査器 Nは文字列長 である.、サイクル数N/2->O(N) 7.8すべての積を求める配列のすべての数値要素を乗算するアルゴリズム. はドアに重ねられ、外部はドア共N-1回、内部はドアそれぞれN-1、N-2…運転2、1回 合計N²/ステップ2->O(N)²) 7.8.1複数のデータセットの処理上のアルゴリズムが、1つのアレイ内のすべての数と別のアレイ内のすべての数との積として計算する場合、 .シナリオ1:5シナリオと5シナリオ 5*5フェーズ25フェーズ シナリオ2:9シナリオと1シナリオ 9*1ステージ、9ステージ アレイのサイズがそれぞれNとMの場合O(N*M) NとMはO(N)に等しい²) NとMが同時に大きな値ではない(ex>Nの場合O(N)) 小数は定数であり、 を省略する.
O(N*M)はO(N)とO(N)である.²) の効率
7.9暗号ビスケット文字26文字が文字列長に重なる->O(26^N) 文字列が1文字の場合26、2文字の場合26*26=676、3文字の場合26*26*26=17576… O(2^N)必要なステップを1つ追加すると2倍になります O(26^N)非常に非効率
第七章日常コードにおけるbigo
7.1偶数の平均値
double averageOfEvenNumbers(int* arr, int size)
{
double sum = 0.0;
int countOfEvenNumbers = 0;
for (int i = 0; i < size; i++)
{
if (arr[i] % 2 == 0)
{
sum += arr[i];
countOfEvenNumbers += 1;
}
}
return sum / countOfEvenNumbers;
}
void wordBuilder(char* arr, int size, string* result)
{
int index = 0;
for (int i = 0; i < size; i++)
{
for (int j = 0; j < size; j++)
{
if (i != j)
{
result[index++].append(1, arr[i]).append(1, arr[j]);
}
}
}
}
int* sample(int* arr, int size)
{
int* result = new int[3];
result[0] = arr[0];
result[1] = arr[size / 2];
result[2] = arr[size - 1];
return result;
}
7.4平均摂氏度を求める
double averageCelsius(double* fahrenheitReadings, int size)
{
double* celsiusNumbers = (double*)malloc(size);
for (int i = 0; i < size; i++)
{
int celsiusConversion = (fahrenheitReadings[i] - 32) / 1.8;
celsiusNumbers[i] = celsiusConversion;
}
double sum = 0.0;
for (int i = 0; i < size; i++)
{
sum += celsiusNumbers[i];
}
return sum / size;
}
string* markInventory(string* clothingItems, int size)
{
string* clothingOptions = new string[size * 5];
int index = 0;
for (int i = 0; i < size; i++)
{
for (int j = 1; j <= 5; j++)
{
clothingOptions[index++] = clothingItems[i] + ": " + to_string(j);
}
}
return clothingOptions;
}
7.61世紀
int countOnes(int** arr, int outerSize, int* innerSize)
{
int count = 0;
for (int i = 0; i < outerSize; i++)
{
for (int j = 0; j < innerSize[i]; j++)
{
if (arr[i][j] == 1)
{
count += 1;
}
}
}
return count;
}
ドア
7.7パリントロム検査器
bool isPalindrome(char* str, int size)
{
int leftIndex = 0;
int rightIndex = size - 1;
while (leftIndex < size / 2)
{
if (str[leftIndex] != str[rightIndex])
{
return false;
}
leftIndex++;
rightIndex--;
}
return true;
}
同じ単語またはフレーズ(回文)であるかどうかを決定するために、前または後ろに読むアルゴリズム.int* twoNumberProducts(int* arr, int size)
{
int productSize = 1;
for (int i = 2; i <= size; i++)
{
productSize += i;
}
int* products = new int[productSize];
int index = 0;
for (int i = 0; i < size - 1; i++)
{
for (int j = i + 1; j < size; j++)
{
products[index++] = arr[i] * arr[j];
}
}
return products;
}
2つの数値の組合せにfor (int i = 0; i < firstSize; i++)
{
for (int j = 0; j < secondSize; j++)
{
products[index++] = firstArr[i] * secondArr[j];
}
}
7.9暗号ビスケット
void everyPassword(int n, char* pw, int index)
{
if (index == n)
{
cout << pw << endl;
return;
}
for (int i = 'a'; i <= 'z'; i++)
{
pw[index] = i;
everyPassword(n, pw, index + 1);
}
}
与えられたすべての長さ文字列の組合せを生成するアルゴリズムReference
この問題について(第七章日常コードにおけるbigo), 我々は、より多くの情報をここで見つけました https://velog.io/@hyeonsik_kim/7장-일상적인-코드-속-빅-오テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol