![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
0或いは1が512個連続するビットパターンがあります。
11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
のようなのです。
これを
eYLfJXkQiS6{m"mMtI;|l"dajI.| YBCy/`usySwXm7n95(ad#oj6m7K5A:kRY5SC.)4}EvHND5R8a
まで圧縮できました。
もっと圧縮する方法はありますか?
テキストファイル(データ)しばりでお願いします。
これぞという回答お待ちしています。
A 回答 (16件中1~10件)
- 最新から表示
- 回答順に表示
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_14.png?8acaa2e)
No.19
- 回答日時:
今回の要件をまとめると
要件1.512ビット(=64バイト)の任意のバイナリデータがある。
要件2.これをテキストファイル用の文字で表示したい。
テキストファイル用の文字とは、文字コードが16進数で0x20(スペース)から0xFE(チルダ)
の範囲の95文字である。
要件3.現在78文字で表示可能であるが、77文字以下で表示可能な方法がないか。
ということでしょうか。
もし、要件2で、さらに使用可能な文字があるなら、その文字を追加して使用すれば、さらに
小さくなりますが、95文字が前提なら、78文字より小さくする方法はありません。
(64バイトの任意データを95進数で表示すると78桁となる。)
但し、
前提4.特定のデータについては、77文字以内で、それ以外のデータは78文字で表示できれば良い。
ということであれば、以下のようにして、特定のデータのみ小さくすることは可能です。
1.64バイトデータを良く知られた方法で圧縮する。(例:zip形式等)
2.それが63バイト以内に圧縮された場合は、95進数で変換。(結果は必ず77バイト以内になる)
3.63バイト以内にならない場合は、圧縮前のデータを95進数に変換。(結果は必ず78バイトになる)
4.復元時は、78バイトかそうでないかで、zip形式等の圧縮の有無を判定する。
この回答への補足
>要件1.512ビット(=64バイト)の任意のバイナリデータがある。
512バイトのテキストデータです。(別に全角の0,1で1024バイトとかでもいいけど)
>前提4.特定のデータについては、77文字以内で、それ以外のデータは78文字で表示できれば良い。
特定のデータかそうでないかという区別は実質できないですね。
圧縮率が高いのは法則性があるからと思いますが、法則性があると望ましくないデータなのです。(入力、出力ともに)
No.17
- 回答日時:
No.11
- 回答日時:
(1) 0と1から構成される512文字の文字列を、 512ビット(64バイト)のバイナリデータに変換
(2) (1)を処理する
(3) (2)をテキストの範囲の文字列に符号化して出力
※ビット毎の処理が面倒、かつ、文字列操作が簡単なら、(1)の変換を行わないで、文字列をそのまま「512ビットのデータ」として扱う、という手段もある
というのが、基本の流れです。
例の一つが #9 にある
(2) : なにもしない
(3) : Base64と同じ手法を使ってテキストの範囲に符号化
というものです。
(2)で何かの圧縮処理をすることで、より短い出力になる可能性はあります。
(例えば、ZIP圧縮するとか)
しかし、短くなるか、かえって長くなるかは、入力に依存します。
必ず短くなる、と保証できません。
例えば。
ランレングス法という圧縮方法があります。これは、データを、1が続く数、0が続く数で表現します。
質問にあったものに適用するなら「1が512」となります。
連続するデータが多いと、圧縮率も高いのですが、0/1がランダムになっていると非常に効率が悪いです。
元と同じデータ量になったり、ランレングスの情報を加えた分元より大きくなったりもします。
(3) は、元のmビット、つまり、2進数m桁の数値を、n進数何桁で表現できるか、で長さが決まります。
上記より、最悪は512ビットです。
いわゆる16進文字列なら、
2^612 = 16^128
で128文字
Base64なら
64^85 < 2^512 <= 64^86
で86文字
ASCIIの印字可能文字(≒テキスト)は95文字なので
95^77 < 2^512 <= 95^78
で78文字
です。
つまり、データの内容に依らずに保証できるのは 「ASCIIの95文字を使った 78文字」です。
これ以上短くなるかどうかは、データの内容と(2)の処理に依存します。
処理のコストやプログラムの難易度を考えたら、「(2)の処理無しで(3)にBase64」で妥協するのがいいかもしれません。
・余談
ビットパターンと言えば、コンピュータ内部での0/1のパターンのことを指します。「 0と1からなる文字列」ではありません。
ビットパターンは0/1の列ですので、別の値が入ったり途中で切れたりしないという意味では「0と1の連続」です。
ですが、そんなのは当り前なので、そのことを「連続」と言ったりはしません。
「0または1が連続」と言われれば「000....」「1111....」を意味するのが当然です。
この回答への補足
>必ず短くなる、と保証できません。
保証できないとだめです。
>データの内容に依らずに保証できるのは 「ASCIIの95文字を使った 78文字」です。
やっぱこれしかないんですね。
なんか不可能な質問をしてしまったみたいですいませんでした。
>・余談
ビットパターンと言えば、コンピュータ内部での0/1のパターンのことを指します。「 0と1からなる文字列」ではありません。
ビットパターンは0/1の列ですので、別の値が入ったり途中で切れたりしないという意味では「0と1の連続」です。
ですが、そんなのは当り前なので、そのことを「連続」と言ったりはしません。
「0または1が連続」と言われれば「000....」「1111....」を意味するのが当然です。
よく分かりました。これからは「0と1で構成された文字列」と書くことにします。
No.10
- 回答日時:
これ、結果もテキストでないとダメって言ってるのかな‥‥。
テキストの定義から必要になりそうだ。
「1」を1、「0」を0に定義すれば512ビットで済む。
7ビットASCII文字にして、0x00~0x1Fのときは8ビットに拡張して、
73文字くらいにはできるか。
提示されたのとあまり変わらないね。
この回答への補足
>これ、結果もテキストでないとダメって言ってるのかな
そうです。
処理が終わるとメモ帳が自動的に開いて結果が表示されるとか、コマンドプロンプトで実行したら結果が次の行に表示されるとかってかんじです。
>「1」を1、「0」を0に定義すれば512ビットで済む。
7ビットASCII文字にして、0x00~0x1Fのときは8ビットに拡張して、
73文字くらいにはできるか。
もう少し詳しく教えてください。
入力と表示(出力)はふつうに出来ますか?
人間が手で、普通のキーボードから入力したり、結果をコピペしてブラウザで検索したりとか。
>提示されたのとあまり変わらないね。
1文字でも少ないほうがいいので、教えてください。
No.9
- 回答日時:
あなたが質問されたい事が
「文字の'0'と'1'で構成された512文字を効率よく圧縮する方法はありませんか。ただし圧縮後はASCII文字のテキストで表現できる形式でお願いします。」
という事なら、
圧縮ではないですが、どんなパターンでもASCII文字86文字のテキストにする方法でよければあります。
・6文字を1つの単位としてASCII文字を1文字割り当てる。
・6文字を1つの単位にすると512文字の場合、2文字あまるのでその2文字には'0'を4文字追加して6文字にする。
・ACSII文字の割り当てはbase64を参考に次のようにする。
000000 A
000001 B
000002 C
...
111111 /
この方法だと質問に書かれている'1'が512文字のパターンは
/////////////////////////////////////////////////////////////////////////////////////w
になります。
この回答への補足
>「文字の'0'と'1'で構成された512文字を効率よく圧縮する方法はありませんか。ただし圧縮後はASCII文字のテキストで表現できる形式でお願いします。」
もうすこし条件が付きますがそういうことです
>どんなパターンでもASCII文字86文字のテキストにする方法でよければ
それだったら最初に質問に書いたののほうが少ないので。
でも考えてくれてありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 画像編集・動画編集・音楽編集 連続質問です 動画ファイルの圧縮時のビットレートというのについて教えてください 2 2023/08/06 11:50
- 画像編集・動画編集・音楽編集 動画ファイルの圧縮方法についてはIフレームだのPフレームだの使って圧縮するらしいのですが、音声データ 1 2022/08/26 18:28
- その他(コンピューター・テクノロジー) どうすればExpressZip圧縮ソフトで再びpdfを圧縮、閲覧できますか? 4 2022/06/11 14:47
- Google Drive USB内の圧縮フォルダが開けません。教えて下さい! 1 2022/07/26 18:44
- Ruby 英数字を含む文字列(0-9,A-Z)の桁数圧縮をするには 5 2022/06/28 18:15
- 情報処理技術者・Microsoft認定資格 問題 データの圧縮では圧縮後展開した結果の違いで2種類に分類される。説明せよ どのように分類されるん 2 2022/07/19 19:30
- 工学 冷凍機 凝縮器 凝縮温度について 2 2022/09/29 23:06
- 画像編集・動画編集・音楽編集 画像の一括圧縮 1 2022/12/02 21:56
- 工学 ヒートぽんぷ の可能性についてです ? / 6 2023/03/03 13:23
- 簿記検定・漢字検定・秘書検定 簿記→圧縮記帳について 1 2022/09/12 22:19
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Google マップに同心円と文字を...
-
Excelが関数になってしまう
-
原稿用紙で「」の文が2行以上...
-
word
-
名古屋の栄と錦は治安悪い?
-
Illustratorテキストエリアへ塗...
-
『μg』の読み方と意味。
-
数式中の文字をCambria Math以...
-
PowerPoint SmartArtの箇条書...
-
イラレでダブルクリックで文字...
-
PDF→CSVへ変換
-
VBにて、非アクティブでフォー...
-
イラストレータをパワーポイン...
-
illustratorとExcelは連携出来...
-
VBA:水平スクロールバーが要ら...
-
DataGridViewでセル内の特定の...
-
googleサーチコンソールでの重...
-
VB.NET でのLaod/unLoad につ...
-
画像からテキストデータを正確...
-
VB.NETのテキストボック...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
{ CONTROL Forms.Label.1}が...
-
Google マップに同心円と文字を...
-
DelphiのRichEditで任意の行の...
-
C言語においてコマンドプロン...
-
excel 英数字の数字が一桁の時...
-
flashかfireworksで、丸に沿っ...
-
OS依存文字を一括で変換したい...
-
Excelが関数になってしまう
-
DOSの文字抽出
-
パソコンのA4に大きく一文字入...
-
webサイト制作やそのサイトをア...
-
他国語
-
Mathematicaでの複素数の絶対値...
-
データを圧縮したい
-
Split関数で文字を文割するのは...
-
隠した文字がわかりません…
-
HPの更新とは
-
【FLASH】 関数での足し算がで...
-
ExcelのセルでA1セルはUTF-8でA...
-
テキストファイルの表示
おすすめ情報