日記003
やった事
/最近棒法プログラム idの確認
x y SUM ID76[0] 3.16 73 56 73:56 ID98[0]7.07 70 55 143:111 Id29[0]13.00 つまり次来るid15の最小値は13.00のためgroupidは上がる 63 56 Id15[1] 51 51 51:51 ID29の時点ではdecminは13.00となりgroupidが加算される. Excelの値 id76 73 56 id98 70 55 id29 63 56 id15 51 51
最近棒法図1 (なんとなくなっている気がする,id76,98,29に関しては最短距離10未満,) (id15に関してはid29との比較すると10より大きいように見える.ざっと図にした段階での)
ID0,1,2までの平均((重心)のプログラムは求めた.ほかのデータに関しても言えるだろう...
巡回セールスマン問題調べ(tsp), メモ:ナップザック問題,フーリエ変換(ある時系列データをsinのデータに落とし込む,似たようなデータを取り出す.) モンテカルロ法(3.14を求めるやつ)(ざっくりと理解) 線形合同法(ざっくりと理解) ペッパーズ(お笑い芸人)
重心の平均(小数点なのでfloat型じゃないといけない) k-meansのkの選定と,どのデータが近いかとりあえず選ぶ. カウントの説明 //cogカウントはここでは0でないといけない.↓にあるcog++;でカウントが1になるため. //つまりgroupid[0から1]に変更された時にcog=0.cntx,y[1]の時に分母のcogが1になる. //最低でも計算可能になる.
P.S. 今日は毛布を選択し干した(乾いてない).
日記002
やった事,最近傍法の復習(ブラッシュアップの意味を兼ねて) Twitterとgithubにて追加している(Twitterでほとんど完結している気がする.)
最短距離の計算について,間違いがあって見つけるのに時間を要した
//最短距離の計算 printf("最短距離"); for (i = 0; i < id; i++) { //pdec初めに選ばれたのは1なので自分自身が選ばれることはない if (pdec[i] == 0) { box = euclid(p[dec][0], p[dec][1], p[i][0], p[i][1]); //最初の比較は通る(decminは1000のため) if (box < decmin) { decmin = box; printf("%.2f,", decmin); //decの選定はifで回りきった最後の値iになるためなのは間違い j = i; } } }
これは正しいコードだが, 間違い⚠
if (box < decmin) { decmin = box; printf("%.2f,", decmin); //decの選定はifで回りきった最後の値iになるためなのは間違い dec= i; }
dec=i; としていたためeuclidの計算がdecminで更新されたi(現状最小値として更新されたxとyの座標)が 入ってしまうためバグが発生した.
P.S.面倒な時がほとんどなので軽く日記として記述する場合がある報告書のコピペを載せるだけの記事になるかもしれない[予定] k-meansの実装を目標としているため,各グループIDの平均を求め重心を確定させることをする. tag[j]の意味合いを理解する.(ある程度は関連付け出来ている) gitの操作も程度理解した(push)のやり方 休日は恐らく進捗ない.進捗ある時だけ更新を目指す(三日坊主でもいいんやで?)
日記001
昨日やった事(昨日やった事は昨日の内にあげるべきですが...) 乱数の生成(復習も兼ねて), バブルソートの実装(降順昇順). 昇順は1,2,3...100のような小さい数からの並び替え,降順はその逆.
#include <stdio.h> #include <stdlib.h> #include <time.h> #include<math.h> int main(void) { int i,j,tmp; //配列に格納する変数に関してはconst intの方が良い?? const int num = 100; int st[num],ans[num]; //毎回乱数を異なる値にする. srand((unsigned int)time(NULL)); //乱数の生成100個 printf("乱数の生成\n"); for (i = 0; i < 100; i++) { st[i] = rand() % 100 + 1; ans[i] = st[i]; printf("%d,",st[i]); } printf("\n"); //バブルソート昇順 printf("ここからソート昇順\n"); for (i = 0; i < num; i++) { for (j =i+1; j < num; j++) { if (ans[i] > ans[j]) { tmp = ans[i]; ans[i] = ans[j]; ans[j] = tmp; } } } //結果(昇順) for (i = 0; i < 100; i+=10) { for (j = 0; j < 10; j++) { printf("%d,", ans[i+j]); } printf("\n"); } printf("\n"); //バブルソート(降順) printf("ここからソート降順\n"); for (i = 0; i < num; i++) { for (j = i + 1; j < num; j++) { if (ans[i] < ans[j]) { tmp = ans[i]; ans[i] = ans[j]; ans[j] = tmp; } } } //結果(降順) for (i = 0; i < 100; i += 10) { for (j = 0; j < 10; j++) { printf("%d,", ans[i + j]); } printf("\n"); } printf("\n"); return 0; }
https://github.com/chazu767/Sample/blob/master/bubblesort.cpp
乱数は1次元配列の為printf
で2次元的な配列として見やすくするやり方に苦労した.コードは for (i = 0; i < 100; i += 10)
の部分でiを10ずつ増やしていけば出来ることが分かった. メモ書きで表示したい領域 1~10 11~20 21~30... のようにメモと,iとjをどのように紐づけていけばそうなるのか考えるのが楽しかった.
P.S昨日は風が強かった.大学の授業が春から始まるのか不安である(ウイルスの関係). 帰宅時に図書館へと寄っていったが,閉まっていた(営業時間内ではあったが感染拡大防止のためと思われる??) ひろゆきの本を買った,早く読みます.
/へへ \ //⌒⌒\ \ / / ヽ ヽ ||ヽ /⌒ | | レY-・/ -・- ヽ | | / V) | |(_つ ・ 丿ノ |<三三>) / / ヽ ゙゙ /レソ \从ww/ | /) ̄ ∧ /レヽ / |\ || | |⌒ ||