問題タブ [run-length-encoding]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - C- ランレングス エンコーディングは大きなファイルでは機能せず、小さなファイルでは機能しました
圧縮された 41 kb ファイルでこれを使用すると (ただし、ランレングス エンコーディングを使用するため、常にファイルのサイズが 2 倍になるように見えます)、適切に解凍されます。ただ、16,173kbのファイルで使おうとして解凍したら開かず、ファイルサイズが16,171kbだったので解凍したのですが元の形に戻りませんでした.. ..何かがおかしくなった....私は困惑しましたか、私は自分が何を間違っているのか理解できないようです....
使用される方法はランレングス エンコーディングで、すべてのバイトをカウントとそれに続くバイトに置き換えます。
前:
46 6F 6F 20 62 61 72 21 21 21 20 20 20 20 20
後:
01 46 02 6F 01 20 01 62 01 61 01 72 03 21 05 20
これが私のコードです:
sql - 長さエンコードデータを実行する最良の方法
オブジェクトのさまざまな属性を経時的に追跡するテーブルを作成しました。
新しいデータ (~数万件のレコード) が毎日入ってきます。私がやりたいことは、各レコードをその ID の現在のデータと比較することです。
a) 属性が一致する場合は何もしません。b) 属性が異なる場合は、EndDate が現在の日付になるように現在のレコードを更新し、新しい属性で新しいレコードを作成します。c) その ID のデータがない場合は、新しいレコードを作成します。
私の質問は、これを行う最も効率的な方法は何ですか?
各レコードを処理し、比較を行い、必要に応じてテーブルを更新するスクリプトを作成することはできますが、これはインテリジェントなソリューションではなく、力ずくで行う方法だと思いました。
これはカーソルを使用するのに適した場所でしょうか?
matlab - 独自の方法でベクトルをタイリングする MATLAB
A = [ 200000 x 1]
ベクトルを考えてみましょう。私は別のベクトルを持っていidx = [200000x1]
ます。A
A のすべてith
の要素がタイル化されるようにタイル化したいと思いidx(i)
ます。
例えば:
ループしないアイデアはありますか?
sql - ランレングス エンコーディング用に連続する行を選択
ランレングスエンコーディングを使用して圧縮したい、値と日付の巨大なテーブルがいくつかあります。これを行う最も明白な方法 (私にとって) は、すべての個別の値の組み合わせと、最小日付と最大日付を選択することです。これの問題は、マッピングが停止してから再開するインスタンスを見逃すことです。
このようにエンコードされます
これは明らかに間違っています。
私が望むのは、一連の値ごとに存在する連続した日付の各セットを返すクエリです。
あるいは、このお尻を後ろ向きに見ている場合は、他のアドバイスをいただければ幸いです。
java - パターンランレングスエンコーディング
パターンに基づいてランレングス エンコーディングを実行する最もクリーンな方法を見つけようとしています。目標は、いくつかの同じパターンで構成される部分文字列を因数分解することにより、文字列を圧縮することです。
元の文字列:
ご覧のとおり、「{3}
」のパターンは 4 つあります。{3}
4 " " パターンの実行を として表現することで、この String を圧縮することができ$4{3}
ます。
取得したい圧縮文字列:
方法を試しましたString.replaceAll(regex, replacement)
。myString.replaceAll("\\{([^<])\\}", "$1")
パターン全体をその値のみで置き換えることができることは知っていますが、正規表現を使用して同じパターンのランレングスを検出してカウントする方法が見つかりません。
正規表現を使用することは良い考えですか、それともこれを行うための「より良い」方法はありますか?
compression - 無損失データ圧縮アルゴリズムの組み合わせ
ロスレス データ圧縮をどこまで行うことができるか疑問に思っていました。経験的なテストを実行するためのロスレス アルゴリズムのオンライン シミュレーターを見つけることができませんでした。自分で作ることもできましたが、残念ながらこの期間に十分な時間がありません。それでも、私が持っていた直感に興味があります。それについて説明します。
より一般的なアルゴリズムの 2 つだけを取ってみましょう:Huffman Coding
とRun-lenght Enconding
.
数字A
記号のアルファベットと、そのアルファベットからの記号の任意の長いシーケンスがあるとします。たとえば、次のようになります。
ここで、各シンボルをビットの固定長ワードでコーディングするとn
、圧縮されていないシーケンス、つまり長いN
ビットが得られます。
ハフマンを使用してシーケンスをコーディングする場合、H
ビットの代わりにN
ビットを使用して、ビットのスペースを節約(1-H/N)*100%
します。
RLE を使用して同じシーケンスをコーディングすると、R
ビットを使用して を節約でき(1-R/N)*100%
ます。
1つだけ使用するよりも省スペースを実現できるRLE + Huffman
か、適用するとどうなるでしょうか。Huffman + RLE
私にはかなり基本的なアイデアのように思えますが、グーグルで検索しても、このトピックに関する興味深いものは見つかりませんでした。
EDIT:うーん、最初にRLEを使用すると、単一シンボルの固定長コードとの対応が失われるため、ハフマンを使用できなくなるとはおそらく考えていませんでした。ただし、最初に Huffman を使用し、その後で RLE を使用することも可能です。
ところで、私はそのロジックに興味があります。つまり、複数の可逆圧縮アルゴリズムを連続して使用するということです。
編集 2: Mark Adler の返信にコメントしているときに、自分の質問に対する答えを見つけた可能性があることに気付きました。これです:
シンボルからシンボルへのコードであるハフマンは、検出にどのように影響しますか?
次のコードがあるとしましょう: AABCABAAB
. プレーン バイナリでは、次のようにエンコードされます00 00 01 10 00 01 00 00 01
(obv スペースは読みやすさのためだけです)。ハフマンはそれを次のようにコーディングします0 0 11 10 0 11 0 0 11
。スペースは、文字列が変更されていないことをさらに示しているため、このスコープ (シンボル単位) でコードに近づいていると仮定すると、まったく同じ量の繰り返しを検出することができます。
これにより、コードをビット単位で分析するという別のポイント (これはすでに非常に長いコメントになっているため、ここでは説明しません) にたどり着きました。
だから、私は実際に結論に達したと思います: 私たちが知っているように、辞書 (または置換ベース) エンコーダーは可変数のシンボルを固定長コードワードにグループ化しますが、ハフマン (または他のエントロピーエンコーダー) は固定長シンボルをコード化します可変数のビットに変換し、エントロピーを最小に近似します。したがって、Huffman を最初に実行させるのは無意味です (計算の無駄でしかありません)。なぜなら、他のアルゴリズムは、 Huffman が減らすことができるより多くの冗長性を導入する可能性が高いからです。
もちろん、これは理論的な論文にすぎません。実際には、他の要因 (計算時間など) を考慮に入れることができるからです... コーディングされる文字列の構成が異なると、異なる結果が生じる可能性があるという事実は言うまでもありません。しかし、まあ... それは私には理にかなっています。:)
matlab - ベクトルの繰り返し要素
A
elements を含む値ベクトルがありますi
。次に例を示します。
A = [0.1 0.2 0.3 0.4 0.5];
そして、言いますr = [5 2 3 2 1];
ここで、 の値の繰り返しをAnew
含む新しいベクトルを作成して、 の最初の項目 が値を持ち、新しいベクトルの長さが になるようにします。したがって:r(i)
i
A
r(1)=5
Anew
A(1)
sum(r)
Anew = [0.1 0.1 0.1 0.1 0.1 0.2 0.2 0.3 0.3 0.3 0.4 0.4 0.5]
for
これは、たとえば を組み合わせた精巧な -loopで実行できると確信していますがrepmat
、誰かがこれをよりスムーズな方法で行う方法を知っている可能性はありますか?
matlab - 行列内の定数連続値のインデックス、および定数値の数
マトリックス全体にランダムに分布する一定の連続値を持つマトリックスがあります。連続する値のインデックスが必要です。さらに、連続する値の数が連続する値のインデックスに格納されている、元の行列と同じサイズの行列が必要です。例えば
私はこの問題の解決策を見つけるのに非常に苦労しました。これは、気象データの品質管理に関連しています。たとえば、多数のセンサーからの温度データのマトリックスがあり、一定の連続した値を持つ日と一定の日数を知りたい場合、データに障害の可能性があるというフラグを立てることができます。
温度マトリックスは日数 x ステーション数であり、出力マトリックスも日数 x ステーション数であり、上記のように連続した値にフラグが付けられます。
解決策があれば教えてください!ありがとうございました。