タグ

algorithmに関するkotaro-onoのブックマーク (5)

  • 共通鍵暗号と公開鍵暗号の仕組み | 高校数学の美しい物語

    直感的にも分かりやすい自然な方法です。「鍵」を「数字」と読みかえてもOKです。 〜メッセージを送る側〜 送りたいメッセージ: mmm 暗号化に用いる鍵: kkk 送信者: mmm と kkk をもとに暗号文 f(m,k)f(m,k)f(m,k) を作成して送る 〜受け取る側〜 複号に用いる鍵: kkk 受信者: f(m,k)f(m,k)f(m,k) と kkk をもとに暗号文を解読してもとのメッセージを得る 〜防御性能〜 f(m,k)f(m,k)f(m,k) がバレても共通鍵 kkk がバレなければ複号はできない やりとりする二人はあらかじめ「296029602960 を鍵にしよう。また,メッセージ+鍵 を暗号文として送ろう」という約束を決めておく。 送る側: メッセージ:119211921192,鍵:296029602960 →暗号文 415241524152 を送る 受け取る側: 受信

    共通鍵暗号と公開鍵暗号の仕組み | 高校数学の美しい物語
  • Practical Scheme

    Shiro Kawai 7/3/2000初出、3/29/2002更新 まあとりあえずカッコは我慢しよう。ラムダとやらも、関数ポインタ+環境データ ということで納得しよう。しかし、Schemeのループ構文(do)は許せないなあ。 ごちゃごちゃしてるし、途中で脱出できないし。 CやPerlのforやwhileの方がずっと使いやすいね。 え? doなんて使わない? じゃあどうやってループを書くんだ? 消えるループ 簡単だけど、よくありそうな例として、こんなのを考えてみよう。 入力テキストの行数を数える関数count_linesを書きたい。 Cで書くとすれば、こんな感じだ。 /* 例1 */ int count_lines(void) { int count = 0, c; for (c=getchar(); c!=EOF; c=getchar()) { if (c == '\n') count+

    Practical Scheme
    kotaro-ono
    kotaro-ono 2012/02/26
    再帰。Scheme
  • C言語関数辞典 - C言語Tips集 配列を簡易的なキューとして使用する

    C言語Tips集 - 配列を簡易的なキューとして使用する C言語でキュー (queue) を実装するにはさまざまな方法がありますが,ここではあくまで配列を簡易的なキューとして扱えるようにすることを目的とします. キューの構造 キューのデータ構造をそのまま配列で実装しようとすると,膨大なサイズの配列が必要になります. そこで,ここではリングバッファ (ring buffer) と呼ばれる手法で実装します. リングバッファは,配列を (配列の) 末尾と先頭がつながっている環状の循環構造とみなします.(図1) キューに格納されたデータを管理するために以下の2つの変数を使用します. head: キューの先頭要素を指し示す変数 tail: キューの末尾要素を指し示す変数 キューにはエンキュー (enqueue) 操作とデキュー (dequeue) 操作の 2 種類の動作が存在します. これらの動作を

    kotaro-ono
    kotaro-ono 2012/02/08
    リングバッファの実装
  • 連長圧縮 - Wikipedia

    連長圧縮(れんちょうあっしゅく)は、データ圧縮アルゴリズムの一つで、可逆圧縮に分類される。ランレングス圧縮、RLE (Run Length Encoding) とも呼ばれる。 連長圧縮では、ある連続したデータを、そのデータ一つ分と連続した長さで表現することで圧縮している。 例えば、「A A A A A B B B B B B B B B A A A」は「A 5 B 9 A 3」と表せる。これは、Aが5回続き、そのあとにBが9回、そしてAが3回続いていることを表している(連続回数を、元のデータを表す符号の前に記録することもある。その場合、符号化した後は「5 A 9 B 3 A」と表される)。 さらに、データがこの2種類(AとB)だけで、最初にAが来ることにしておけば、「5 9 3」だけで表せる。このルールに従ったときにBが最初に見つかった場合は、最初にAが0回連続していることにすれば良い。例

    kotaro-ono
    kotaro-ono 2011/08/13
    連長圧縮
  • ブロックアルゴリズムとB-Treeアルゴリズム

    後で説明するが、ext2ではブロックグループ0の「スーパーブロック」に、パーティション内のブロックグループ全体の管理情報が格納される。 スーパーブロックには、 iノードの総数 ブロックサイズ ファイルシステムのサイズ 空きブロック数、空きiノード数 使用されているブロックグループ 最終fsck時刻 など、ファイルシステムに関するさまざまな情報が含まれている。「グループディスクリプタ」は、「データブロックビットマップ」や「iノードビットマップ」情報などを参照して空きブロックや空きiノードを探し、データを割り当てる際に最適なブロックを決定するのに使われる。 「データブロックビットマップ」と「iノードビットマップ」は、ビットマップ情報である。ビットマップ情報は、あるデータが使用中か未使用かを0か1のbitで保持している。1byte=8bitsなので、80個のブロックの状態を10bytesで管理で

    ブロックアルゴリズムとB-Treeアルゴリズム
    kotaro-ono
    kotaro-ono 2011/07/19
    ext2のブロックアルゴリズムとB-Treeアルゴリズム
  • 1