ここでは、プログラムなどでよく使用されるアルゴリズムについて紹介したいと思います。 こんなことやって意味あるのかどうか正直言って迷いました。プログラマはたいてい知っているような内容だし見る人もいないんじゃないかと思いましたが、これからプログラミングを始めてみようという方にとっては参考になるかもしれないし、何よりも自分にとって頭の中を整理できたりするので、これから定期的にやっていこうかと考えてます。 ところで、紹介する内容はほとんど過去に出版された書物関係から抜粋しています。一応下の方に参考文献として挙げておきますので興味を持たれた方は書店などで探してみてはいかがでしょうか? ということで、まずはライン・ルーチン(画面に直線を描画する)についての紹介です。
日本語入力プログラムの歴史は、入力の効率を求める歴史でした。初めは「これはペンです」という文章を入力するにも、「これは」で一度変換し「ペンです」でまた変換する方式(単文節変換)や、「これは」と「ぺんです」の間に文節を区切る指示を与える方式をとっていました。やがて、単文節変換や文節ごとに区切り記号を入れる方式から、自動的に文節を区切る連文節変換(複文節変換?)へと進化し、さらには文脈に応じて適切な語を選ぶ用例変換、AI変換が花開き、日本語入力は簡単で効率的になっていきました。 このページは、文節を区切る方法について、現行の日本語入力プログラムでよく使われる方式を解説します。用例変換、AI変換は別項にて解説します。 目次 n文節最長一致法 うしろ向きn文節評価最大法 接続コスト最小法 参考文献・資料 n文節最長一致法 採用している日本語入力プログラム:ATOK、EGBRIDGE、VJEなど。
イントロダクション よく、ランダムな数字の並びで、それぞれの数字がちょうど1回ずつしか出てこない、という数列が欲しいことがあります。例えば、カードのシャッフル等がこれにあたります。こういう時は配列に数字を入れ、その配列の要素をシャッフルして目的の数列を得るのが定石です。そのシャッフルをどうやるのがいいのか、というのが今回の話題です。 まず思いついた方法 昔私が最初に考えついたのは、ランダムに2つの要素を選んで swap する、という操作を複数回繰り返すという方法でした。コードっぽく書くと、次のような感じになります。 M = count_of_iteration; N = size_of_array; rand(x) = random_value_less_than_x; for(i = 0; i < M; i++){ a = rand(N); b = rand(N); swap(array
■ JISX0208 → SJIS コードから 0x2121 を引く (コード & 0x100) が0でなければ コードに 0x9E, 0ならばコードに 0x40 を足す 下位バイトが 0x7F 以上ならば コードに 1 を足す [上位バイトだけの処理] 上位バイトを右に1ビット シフトし、それに 0x81 を足す (0xA000 ■ SJIS → JISX0208 (0xE000 [上位バイトのみ] 上位バイトから 0x81 を引き 1ビット左にシフトする 下位バイトが 0x80 以上ならコードから1を引く 下位バイトが 0x9E 以上ならコードに 0x100 を足し、 コードから 0x9E を引く。 そうでなければコードから0x40 を引く コードに 0x2121 を足す。
注意:本文中のプログラムはC,C++/Java/JavaScriptに近似した「疑似言語」であるため、そのままコードをコピーして流用しても動作しません。あくまでも参考として掲載しています。ただし、実際のコード[src/]と書かれている文字がある場合には、実際のプログラムコードを掲載しています。srcディレクトリ以下に実際のソースコードを用意しています。以下の言語/アプリケーション用を用意していますが、C言語などはコンパイルしないと動作しません。また、Python、Perl、C言語など特記がない限りはシェル/コマンドライン上で動作します。値を引数として指定することで結果が表示されます。 サンプルソースでは以下の言語等を使用しています。 C言語、Python、Perl、Ruby、Java、awk、JavaScript (HTML)、JavaScript (Photoshop CS)、Apple
奥村晴彦『C言語による最新アルゴリズム事典』技術評論社,1991年,ISBN4-87408-414-1,2400円 大きな画像(1.1M) 1987年10月にPascalを使った『コンピュータ・アルゴリズム事典』を,1991年2月にその改訂版としてANSI C言語を使った『C言語による最新アルゴリズム事典』を出版しました(いずれも技術評論社)。そのサポートページをつくろうと思いながら多忙のためなかなかできませんでした。とにかく始めなければ……というわけで,サポートページまがいのものを作ってみました。 石田晴久ほか『コンピュータの名著・古典100冊』(インプレス,2003年)に選んでいただきました。100冊といっても日本人の書いたものは20%しかなく,たいへん恐縮しています。 Frequently Asked Questions どの銘柄のC言語ですか? ほぼ当時のANSI Cドラフトに基づ
奥村晴彦さんの「C言語による最新アルゴリズム事典」技術評論社、1991年、の C 言語プログラムの Ruby への翻訳に挑戦します。プログラムの説明は同書を読んでください。変換はできるだけ逐語的に行っています。プログラムの動作は原作の C プログラムのそれと比較してチェックしていますが、うまく動作しないときは C から Ruby への変換のさいに起きたものです。バグレポートは tnomura@mnet.ne.jp までお願いします。 この Ruby 翻訳版はできるだけレイアウトも含めて原作の C プログラムを変更しないようにしたため、必ずしもRuby らしいコーディングスタイルとは言えないかもしれませんが、プログラムがきちんと動作することを優先しました。C から Ruby への翻訳の著作権に関しては Ruby のライセンスに準じます。配布、改変は自由です。ただし、プログラム本体には原作者の
上がりチェック・テンパイチェックの方法 実装例 //tehai[0〜8]マンズ1〜9の数 //tehai[10〜18]ピンズ1〜9の数 //tehai[20〜28]ソーズ1〜9の数 //tehai[30]東の数 //tehai[32]南の数 // ・・・ //tehai[42]中の数 //その他の要素は0にしておくこと。 void ments_cut(int i) { for(;!tehai[i];i++)if(i>=43){return;} //上がっている場合ここが実行される if(tehai[i]==3) //コーツとして抜き取れる場合 { tehai[i]-=3; ments_cut(i); tehai[i]+=3; } if(tehai[i+1]&&tehai[i+2]) //シュンツとして抜き取れる場合 { tehai[i]--,teh
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く