超音波流体屋のプログラム備忘録
C_and_C++
最終更新:
usapfrog
-
view
ファイル読み書き
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
-
- int main(void){
- FILE *f;
- }
-
- //サイズとか
-
- //読み
- double x;
-
- //書き
-
- return 0;
- }
-
乱数
- シードを入れるのを忘れない。
- rand()はRAND_MAXまでの整数を吐く。
- 精度が欲しかったらメルセンヌ・ツイスタを実装すること。
- #include <stdio.h>
- #include <stdlib.h>
-
- int main(void){
-
- int randlim = 10;
-
-
- return 0;
- }
-
Hashの考え方
- 文字列や飛び飛びの整数IDに対してO(1)でアクセスしたい
- 少数の場合はmapが使いこなせれば便利。
- 基本的には山ほど配列を準備しといて、文字列を配列番号に変換すれば良い
- ただ文字列のサイズは1byte*文字列長なので、4文字を超えるとintに収まらないし準備する配列が多すぎる
- そこはうまいこと剰余を利用して準備分を減らす。
- 被りがでるはずなのでそこの細工は線形探索とする。(それでも全探索よりずっと速い)
飛び飛びの番号(非負)なら
- #define BUFFER 65536
- #define N 100
-
- int main(void){
- int ids[BUFFER], id_num = 0;
- double value[N];
- //add
- int id=10;
- ids[id] = 0;
- value[ ids[id] ] = 42.0;
- id_num++;
- }
-
文字列ならこの辺をうまく使って。
- #define BUFFER 65536
- #define HASHCONST 17 //素数が良いとされる
- int hash(char *s){
- int i;
- long h;
- for (i = 0; i < L; i++) h = h * HASHCONST + s[i];
- return h % BUFFER;
- }
-
ポインタ
*i++はアドレスの方が動くので注意。 中の数をインクリメントしたい場合は *i = *i + 1とするか、 (*i)++とするんだろうね。