通信および情報処理において、コードとは、文字、単語、音、画像、ジェスチャーなどの情報を、通信チャネルを介した通信や記憶媒体への保存のために、別の形式(時には短縮または秘密の形式)に変換するための規則体系である。
コードの初期の例としては言語が挙げられます。言語によって、人は言葉を通して、自分の考え、見聞きしたこと、感じたことを他者に伝えることができます。しかし、言葉によるコミュニケーションは、声が届く距離に限定され、聞き手も発話時にその場にいる人に限られます。話し言葉を視覚的な記号に変換した文字の発明は、コミュニケーションの範囲を空間と時間を超えて拡大しました。
符号化とは、情報源からの情報を、通信や保存のために記号に変換するプロセスです。復号化はその逆のプロセスであり、符号化された記号を受信者が理解できる形式に戻します。
符号化の役割の一つは、通常の平易な言語(話し言葉や書き言葉)が困難または不可能な場所でのコミュニケーションを可能にすることです。例えば、手旗信号では、信号手が持つ旗の配置や手旗信号塔の腕によって、メッセージの一部(通常は個々の文字や数字)が符号化されます。遠く離れた場所にいる別の人が旗を解釈し、送信された言葉を再現することができます。
情報理論やコンピュータ科学において、コードは通常、あるソースアルファベットの記号を、別のターゲットアルファベットで表現される可能性のある符号化文字列によって一意に表現するアルゴリズムとして考えられます。ソースアルファベット上の記号列を表現するためのコードの拡張は、符号化文字列を連結することによって得られます。
数学的に厳密な定義を与える前に、簡単な例を挙げます。
はコードであり、そのソースアルファベットはセットである。そしてそのターゲットアルファベットはセットですコードの拡張を使用すると、エンコードされた文字列 0011001 は0 011 0 01 のようにコードワードにグループ化でき、これらはさらにソースシンボルのシーケンスacabにデコードできます。
形式言語理論の用語を用いると、この概念の正確な数学的定義は次のようになります。SとTをそれぞれソースアルファベットとターゲットアルファベットと呼ばれる2つの有限集合とします。は、S の各シンボルをT 上のシンボル列にマッピングする全関数です。拡張のは、の準同型写像である。の中へこれは、ソースシンボルの各シーケンスをターゲットシンボルのシーケンスに自然にマッピングします。
このセクションでは、各ソース(平文)文字を辞書からの符号語で符号化し、それらの符号語を連結して符号化された文字列を得るコードについて考察します。可変長コードは、平文文字の出現確率が異なる場合に特に有効です。エントロピー符号化も参照してください。
プレフィックスコードとは、「プレフィックス特性」を持つコードのことです。つまり、システム内に有効なコードワードが存在し、それが他の有効なコードワードのプレフィックス(先頭)となることはありません。プレフィックスコードを生成するための最もよく知られたアルゴリズムはハフマン符号化です。プレフィックスコードは、ハフマンアルゴリズムで生成されていない場合でも、「ハフマンコード」と呼ばれることがよくあります。プレフィックスコードのその他の例としては、電話の国番号、 ISBNの国と出版社の部分、 UMTS WCDMA 3G無線規格で使用される二次同期コードなどがあります。
クラフトの不等式は、プレフィックス符号において可能な符号語長の集合を特徴づけるものである。プレフィックス符号に限らず、一意に復号可能なほぼすべての1対多符号は、クラフトの不等式を満たさなければならない。
符号は、伝送や保存時のエラーに対する耐性を高める方法でデータを表現するためにも使用できます。このいわゆる誤り訂正符号は、保存(または送信)されるデータに慎重に設計された冗長性を含めることによって機能します。例としては、ハミング符号、リード・ソロモン符号、リード・ミュラー符号、ウォルシュ・アダマール符号、ボーズ・チャウドリ・ホッケンヘム符号、ターボ符号、ゴレイ符号、代数幾何符号、低密度パリティ検査符号、時空間符号などがあります。誤り検出符号は、バーストエラーやランダムエラーを検出するように最適化できます。
電報符号は、単語(例:shipやinvoice)をより短い単語に置き換えることで、同じ情報をより少ない文字数で、より速く、より安価に送信できるようにする。
コードは簡潔さのために使用できます。電信メッセージが高速長距離通信の最先端技術であった時代には、完全なフレーズを1つの口(一般的には5分間のグループ)に符号化する複雑な商用コードシステムが開発され、電信技師はBYOXO(「取引から逃れようとしているのか?」)、LIOUY(「なぜ私の質問に答えないのか?」)、BMULD(「お前はスカンクだ!」)、AYYLU (「明確に符号化されていないので、もっとはっきりと繰り返してください」)などの単語に精通するようになりました。コードワードは、長さ、発音のしやすさなど、さまざまな理由で選択されました。意味は、認識されたニーズに合わせて選択されました。商業交渉、軍事コードのための軍事用語、外交コードのための外交用語、そしてスパイコードのための上記すべてです。コードブックとコードブック出版社は急増し、第一次世界大戦と第二次世界大戦の間にハーバート・ヤードリーが運営していたアメリカン・ブラック・チェンバーのフロントとして運営されていたものもありました。これらの符号のほとんどは、ケーブルコストの削減を目的としていました。データ圧縮のためのデータ符号化はコンピュータ時代以前から行われており、初期の例としては、使用頻度の高い文字ほど短い符号で表されるモールス符号が挙げられます。現在では、ハフマン符号化などの技術がコンピュータベースのアルゴリズムによって、大容量のデータファイルをよりコンパクトな形式に圧縮し、保存や送信に利用されています。
文字エンコーディングとは、文字ベースのデータ(テキスト)がどのようにエンコードされるかを説明するものです。旧式のエンコーディングシステムでは、4~7ビットの固定ビット数が使用されていましたが、現代のシステムでは、各文字に1つ以上の8ビットバイトが使用されます。数十年にわたり主流であったASCIIは、各文字に1バイトを使用するため、最大256種類の文字をエンコードできます。より多くの文字を持つ自然言語をサポートするために、各文字に1バイト以上または可変バイト数を使用する他のシステムが開発されました。中国語、日本語、韓国語など、文字セットが大きい表記体系は、マルチバイトエンコーディングで表現できます。初期のマルチバイトエンコーディングは固定長であり、各文字が同じバイト数で表現されるため、ルックアップテーブルによるデコードに適しています。一方、可変幅エンコーディングは、単一のルックアップテーブルでデコードできず、順次処理する必要があるため、デコードがより複雑になりますが、よく使用される文字にはより小さな表現を使用することで、大きな文字セットをより効率的に表現できます。現在、Unicode文字セットのエンコーディングであるUTF-8は、インターネット上で最も一般的に使用されているテキストエンコーディングです。
生物は、その機能と発達を制御するために用いられる遺伝物質を含んでいます。これはDNAであり、遺伝子と呼ばれる単位からメッセンジャーRNAが作られます。このメッセンジャーRNAは、遺伝暗号に基づいてタンパク質を生成します。遺伝暗号では、4種類のヌクレオチドからなる3つの塩基の組み合わせ(コドン)が、20種類のアミノ酸のうちの1つに翻訳されます。コドンの配列は、対応するアミノ酸配列を生成し、それがタンパク質分子を形成します。終止コドンと呼ばれるコドンは、配列の終了を知らせます。
数学において、ゲーデル符号はゲーデルの不完全性定理の証明の基礎となるものです。ここでは、数学的記号を自然数にマッピングする(ゲーデル番号付けを用いる)という考え方に基づいています。
信号機のように色を使ったコードもあり、電気抵抗器の公称値や、特定の種類のゴミ(紙、ガラス、有機物など)専用のゴミ箱の公称値を示すためにカラーコードが使用されています。
マーケティングにおいて、クーポンコードは、(一般的なインターネット)小売業者から商品を購入する際に、金銭的な割引やキャッシュバックを受けるために使用できます。
軍事環境では、コルネットの特定の音色がさまざまな用途に使用されます。例えば、一日の特定の瞬間を知らせたり、戦場で歩兵に命令を下したりするなどです。
聴覚障害者のための手話や視覚障害者のための点字など、感覚障害を持つ人々のためのコミュニケーションシステムは、動きや触覚による符号に基づいている。
特定のゲームには、試合を記録するための独自のコードシステムがあります。たとえば、チェスの記譜法などです。
暗号の歴史において、かつては通信の機密性を確保するためにコードが一般的に用いられていたが、現在では代わりに暗号が用いられている。
実際のメッセージを隠すことを目的とした秘密の暗号は、深刻なもの(主に軍事、外交、ビジネスなどにおけるスパイ活動)から些細なもの(恋愛、ゲーム)まで多岐にわたり、花、ゲームカード、衣服、扇子、帽子、メロディー、鳥など、あらゆる種類の想像力豊かな暗号化手段が用いられ、唯一の要件は、送信者と受信者の双方が事前に意味について合意しておくことである。
その他のエンコードの例としては、以下のようなものがあります。
デコードのその他の例としては、以下のようなものがあります。
日常的な用法では、「コード」とは「コードシステム」の要素を指します。例えば、「自宅の郵便番号」は、地域システム(例:米国の郵便番号システム)における地理的実体を識別するジオコードです。典型的なコードは英数字の識別子です。
頭字語や略語も「コード」とみなすことができ、ある意味では、すべての言語と文字体系は人間の思考のためのコードであると言える。
国際航空運送協会(IATA)の空港コードは、空港を指定するために使用される3文字のコードで、手荷物タグにも使用されます。駅コードも同様に鉄道で使用されますが、通常は国ごとに異なるため、異なる国にある駅でも同じコードが使用されることがあります。
時折、コードワードが独立した存在(および意味)を獲得する一方で、元の同等のフレーズは忘れ去られるか、少なくともコードワードに割り当てられた正確な意味を持たなくなることがあります。たとえば、「30」はジャーナリズムで「物語の終わり」を意味するために広く使用され、他の文脈では「終わり」を意味するために使用されています。 [ 2 ] [ 3 ]