実戦向け?なアルゴリズムが知りたいです.
ただ単に「プログラムが書ける!」というだけでは,やはりダメだと思っています.
もっと,プログラムを書くなら,このような手法があるぜ!と言った,知識がほしいです.
例えば,c言語で「1〜10でランダムに重複しない数字を持つ配列」を作成する場合ですと,
lang
1#include <stdio.h> 2#include <stdlib.h> 3 4int main(){ 5 int $num[10]; 6 7 //1から10までの数値を代入 8 for (int $i=0; $i<10; $i++){ 9 $num[$i] = $i+1; 10 } 11 12 //配列の中身をランダムに入れ替える(擬似的な乱数にする) 13 for (int $i=0; $i<10; $i++){ 14 int $rnd = rand()%10; 15 int $temp = $num[$rnd]; 16 $num[$rnd] = $num[$i]; 17 $num[$i] = $temp; 18 } 19 20 //結果を出力 21 for (int $i=0; $i<10; $i++){ 22 printf("$num[%d] = %d;\n", $i, $num[$i]); 23 } 24 25 return 1; 26}
といった手法が有ります.
こういった「実践で使える」アルゴリズムを幅広く知りたいと思っています.
皆さんは普段,どのようなアルゴリズムを愛用していらっしゃいますでしょうか.
よろしければご教授ください.
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答10件
0
ご提示のコードでは(大きな?)偏りが生じる気がします。
lang
1int $rnd = rand()%10;
の部分は
lang
1int $rnd = $i + rand() % (10 - $i);
とした方がいいかもしれません。
投稿2015/06/19 05:29
総合スコア159
0
ベストアンサー
よくあるやつですが年齢の求め方です。
lang
1echo (int)( (20150619 - 19990302) / 10000 );
現在のYmd - 生年月日Ymd / 10000
実装として使えない場合もありますが。。。
投稿2015/06/19 04:07
総合スコア775
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
アルゴリズムは、必要に応じて それなりに google 検索 (英語を毛嫌いせずに) すれば, それなりの情報がえられるはずです。
実践では 設計戦略もとても重要な気がします。
コーディング規約 ...
コード履歴管理 ...
エラー処理 (例外クラスの設計、例外を catch方法の統一、ログ出力の方針) ...
デザインパターン ....
ソースコードのlint, 自動テスト、カバレッジ計測 ツール ...
投稿2015/06/20 00:57
総合スコア22324
0
そういう方のために、僕が社会人になってから本当に必要だったアルゴリズムだけが勉強できるサイトを個人的に作ってみましたので、よかったらいらしてください。
コードレジュメ http://www.coderesume.com
投稿2015/06/23 07:56
総合スコア14
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/06/23 14:26
2015/06/23 18:56
0
お邪魔します。
アルゴリズムといっても、全く同じパターンを書くことはほとんどないのですが。
本当に地味だけど随所に書くようなパターンというと、
ルックアップテーブル - wikipedia
メモ化 - wikipedia
畳み込み加算 - wikipedia
置換表
実践ではあんまり使う機会がまずないけど、アルゴリズムを組み立てる能力を養うのに知ってると良いのは、
不動点コンビネータ - wikipedia
PythonによるYコンビネータの仕組みの(多分)わかりやすい説明 - 時代城年代記
あとは、自分の場合発想を支えているかなと思うのは、scheme触ったときに得た悟り体験ですね。笑
参考になれば幸いです。
投稿2015/06/20 07:40
総合スコア540
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/06/20 18:03
2015/06/20 18:59
0
自分でアルゴリズムを実装するほど高度なことはやっていないので、大抵はライブラリーにあるものを使います。
ただ、とある事情により外部のライブラリーを使えない制限がある中で、これだけはどうしても使いたくて自分で実装したのが、C言語の単方向リストです。削除機能は不要な、ごく単純な実装でしたけれど。
投稿2015/06/20 00:31
編集2015/06/20 00:32総合スコア9390
0
プログラムを組む際に、扱えると便利なのは、やはり正規表現ですかね・・・。
PHPerなのでC言語ではなくてすみませんが。
例:URL形式のチェック
lang
1function is_url($text) { 2 if (preg_match('/^(https?|ftp)(:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)$/', $text)) { 3 return TRUE; 4 } 5 return FALSE; 6}
メールアドレスだったり、電話番号だったり、
登録情報の正誤をもとめるときにすごく便利だったり、
スクレピングの時に必要な情報のみを抽出したり、
正規表現が扱えるかどうかで、効率がかなり変わってくると思います。
投稿2015/06/19 08:33
総合スコア113
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/06/19 08:36
2015/06/20 17:57
0
バリバリ使うのはアニメーションですね。
img[0] = 1.png;
img[1] = 2.png;
anime++;
DrawImage( img[anime%2] );
DrawImage( img[(anime>>2)%2 ];
投稿2015/06/19 06:20
総合スコア1021
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/06/19 07:34
2015/06/20 12:37
2015/06/20 17:56
0
少し趣旨からズレているかも知れませんが、Fisher-Yatesシャッフルというものがあります。
上記のシャッフルより精度がいいらしいです(Cではそもそもrandの精度が……という問題が残るので断定できないような気がしてますけど)
以下に、詳しい情報があります。
http://ppp-lab.sakura.ne.jp/ProgrammingPlacePlus/algorithm/other/002.html
投稿2015/07/07 14:39
総合スコア13
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
katoyさんの意見を支持します。
アルゴリズムは、必要に応じて それなりに google 検索 (英語を毛嫌いせずに) すれば, それなりの情報がえられるはずです。
実践では 設計戦略もとても重要な気がします。
この方の記事で内容を補足しているかもしれません。慌てずにゆっくり読むのをおすすめします。私はとてもよい内容だと思います。
http://d.hatena.ne.jp/nowokay/20110920
http://d.hatena.ne.jp/nowokay/20110922
私個人の意見としては、アルゴリズム基礎を横着せずにきちんと押さえたら、デザインパターンを勉強して欲しいとも思います。アルゴリズム基礎は基本情報試験問題で、自分の理解度を客観的に把握すると良いと思います。私は後者を応用研究に選んだりもしたので、学生の時に学んで良かったと思っています。
投稿2015/06/24 00:52
編集2015/06/24 00:53総合スコア85
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/06/19 05:59
退会済みユーザー
2015/06/19 06:26
2015/06/19 06:44
2015/06/19 07:33
2015/06/19 07:36
2015/06/19 08:25
2015/06/19 08:26
退会済みユーザー
2015/06/19 08:33
2015/06/19 17:56
2015/06/20 09:22
2015/06/20 11:22
2015/06/25 10:32 編集