生成された値の値を保存するのに適した方法は何ですか? 値はそうのように計算されます。Cで特定の値よりも良いもの
0
0 N/4 2N/4 3N/4
0 N/4² .. .. .. .. (4²-1)N/4²
.
.
.
0 N/4^p .. .. .. .. (4^p-1)N/4^p
は、適切な方法テーブルですか? (私はそうは思わない)。ハッシュテーブル(アクセス方法)または構造体??
生成された値の値を保存するのに適した方法は何ですか? 値はそうのように計算されます。Cで特定の値よりも良いもの
0
0 N/4 2N/4 3N/4
0 N/4² .. .. .. .. (4²-1)N/4²
.
.
.
0 N/4^p .. .. .. .. (4^p-1)N/4^p
は、適切な方法テーブルですか? (私はそうは思わない)。ハッシュテーブル(アクセス方法)または構造体??
私は2D行列に幾分似たテーブルを使用します。しかし、多くのメモリを無駄にするのを避けるために、私は動的メモリ割り当てを使用して異なる長さの行を作成します。
Row 0 : E // 1 element
Row 1 : EEEE // 4 elements
Row 2 : EEEEEEEEEEEEEEEE // 16 elements
Row 3 : EEEE..........EEEE // 64 elements
and so on
ような何か:
I上記のコードで#include<stdlib.h>
#include<stdio.h>
#include <math.h>
#define PMAX 4 // A total of 5 rows, i.e. p=0,1,2,3,4
double** table;
void init_table()
{
int i;
int j;
table = malloc((1+PMAX)*sizeof(double*)); // Allocate number of rows
for (i=0; i <= PMAX; i++)
{
unsigned int n = pow(4,i); // Calculate number of elements needed
table[i] = malloc(n*sizeof(double)); // Allocate the elements
for (j=0; j < n; j++)
{
// calculate table values
table[i][j] = i*100 + j; // Replace with correct calculation
}
}
}
void free_table()
{
int i;
for (i=0; i <= PMAX; i++)
{
free(table[i]);
}
free(table);
}
double getValue(int p, int n)
{
if ((p > PMAX) || (n >= pow(4, p)))
{
// Some error handling here....
// For now, just exit
printf("Illegal use\n");
free_table();
exit(1);
}
return table[p][n];
}
int main()
{
init_table();
printf("%lf\n", getValue(0, 0));
printf("%lf\n", getValue(1, 3));
printf("%lf\n", getValue(3, 15));
free_table();
return 0;
}
は、私は違法なインデックスをチェックすることができるように値を読み取るために機能getValue
を使用。 pow
関数を呼び出すと、パフォーマンスが悪くなります。したがって、最高のパフォーマンスを得るには、機能をスキップして、table[p][n]
を直接使用する必要があります。しかし、あなたのアルゴリズムでは、インデックス作成が合法であることを保証するために、他の方法が必要です。
これは制約条件によって異なります。
メモリが制約条件であるが、時間がない、あなただけのn及びpの関数を書くことができる場合:
#define N 42
double function(double n, double p) {
return (pow(4, p)-1)*N/pow(4,p);
}
ここにあなたの値は、次のようになります。
value = function(n,p);
時間があれば制約はありますがメモリがない場合は、事前定義テーブルを使用することをお勧めします。
const double values_table[NMAX][PMAX] = {
{0.1, 0.2, 0.4, 0.8},
{4, 16, 64, 256},
{..., ..., ..., ...},
};
値は
value == values_table[n][p];
そして、あなたは(あなたが好きなのpython、Matlabの)スクリプトを使って、このテーブルを作成することを検討してコピー&ペーストをそれあなたの.c/.hファイルにする必要があります。簡単な計算のためにはマクロ内で行うことができますが、私が知っている限り、マクロ内でxのyを計算する方法はありません。
上記の制約のどれも問題がなければ、私の好みは読んだり、維持したり、使うのが簡単な機能になります。
どのように生成された値にアクセスしますか? – GMichael
保存する必要がありますか?あなたが 'N'と' p'を渡したかどうか尋ねられたら、いつもそれらを計算することができます。 –
何に適していますか?何を達成しようとしていますか? –