問題タブ [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.

0 投票する
1 に答える
1674 参照

c# - C# のランレングス デコーダー

ここにいる誰かが C# のランレングス DECODER を持っている可能性はありますか? 私はそのコードが本当に必要です。ありがとう。

0 投票する
1 に答える
147 参照

c# - 奇妙なループのロジックの助けが必要

バイトの配列を再帰的に処理し、それらを配列内の次のバイトと比較するループを作成しようとしています(おそらく、forループを使用して各エントリを反復処理します)。2つが同じである場合は、int変数をインクリメントして続行する必要があります。2つが同じでない場合は、int変数をリストに追加し、その後に独自のバイト値を追加する必要があります。次に、この新しい値を独自のものとして「採用」し、配列の最後まですべてを最初からやり直す必要があります。これは非常に奇妙なことですが、int / byteペアを正しい順序で正しい値でファイルに書き込むことができるように、この方法で行う必要があります。

ここでの懸念は、同じである連続したエントリの数を取得し、それをメモしてから、次の値に移動して繰り返すことです。たとえば、私たちが遭遇する値3が値1と同じである場合、それは私たちには関係ありません。値3の連続したエントリの数を取得する限り、作業は完了しました。

他のいくつかのおそらく役立つポイント。

  • この場合、バイト値は0〜255の全範囲に及ぶ可能性があります。
  • 配列サイズは最大1億5000万バイトのエントリである可能性があるため、効率が重要です。
  • 配列サイズは事前にアクセス可能です。
  • 最後に、バイト配列はStructのバイト変数です。

これが理にかなっていることを願っています。前もって感謝します。

編集:以前にはっきりしていなかった場合は申し訳ありませんが、質問のタイトルも変更する必要があります。

明確にするために、私はそれをどうやって行うかではなく、ここで何をする必要があるかを理解しています。したがって、私が推測する質問は、この比較をループして、誤ったリターンを受け取ったときに比較しているものを交換する方法です。最も重要なのは、比較しているものに255の値があり、それらに気付いていない場合に、どうすればよいかです。私はこれをコーディングする方法を本当に想像することができないので、私はただそこに座ってVSを見つめ続けます:)

それはより理にかなっていますか?そうでない場合はお詫び申し上げます:)

編集2:誰かがそれを見たいと思ったら、これが私が思いついた最終結果です。これは、以下のaligrayのコードに触発されました。

0 投票する
2 に答える
929 参照

algorithm - ロスレス階層ランレングス エンコーディング

ランレングスエンコーディングと同様の方法で圧縮するのではなく、ネストされた意味で要約したいと思います。

たとえば、次のようになりたい: ABCBCABCBCDEEF : (2A(2BC))D(2E)F

オプションが2つの同一の可能な入れ子の間で選択されることは気にしませんEg

ABBABBABBABA は (3ABB)ABA または A(3BBA)BA であり、構造は異なりますが、圧縮された長さは同じです。

しかし、私はその選択が最も貪欲であることを望んでいます。例えば:

ABCDABCDCDCDCD は (2ABCD)(3CD) を選択します - 元のシンボルの長さは 6 で、元のシンボルの長さは 8 である ABCDAB(4CD) よりも小さいです。

背景に関しては、要約したい繰り返しのパターンがいくつかあります。データがより消化しやすいように。重要であるため、データの論理的な順序を乱したくありません。しかし、私はそれを要約したいと思います。シンボル A に 3 回出現し、その後にシンボル XYZ が 20 回出現するなど、これはネストされた意味で視覚的に表示できます。

アイデアを歓迎します。

0 投票する
2 に答える
504 参照

python - 正弦波テーブルの圧縮

7 ビット値を持つ 1024 エントリの大きな配列があります。range(14, 86)

これは、同じ値を持つインデックスの範囲が複数あることを意味します。

例えば、

このマップを、次を吐き出すpythonプログラムにフィードしたい:

groupbyマップされた値へのいくつかのコードは準備ができていますが、 を使用して式をコーディングするのに苦労していpairwiseます。

誰かが以前に似たようなことをしたことがありますか?

データセットを 2 つの形式でアップロードしました。

通常、index 順

マップされた値でグループ化

0 投票する
2 に答える
550 参照

java - 圧縮ソートセット実装

スペース効率の良い方法で実装に多数のLong値を格納する必要があります。SortedSetビットセットの実装を検討していたところ、 Javaewahを発見しました。ただし、API はsintではなく値を想定していますlong

誰かが代替案を推奨したり、この問題を解決する良い方法を提案したりできますか? 私は主にスペース効率に関心があります。セットを作成したら、最小要素と最大要素に 1 回アクセスする必要があります。ただし、アクセス時間は大きな問題ではありません (つまり、完全にランレングスでエンコードされた実装で問題ありません)。

編集

コレクションの最小要素と最大要素にアクセスできるのであれば、実装でインターフェイス実装する必要がないことは明らかです。SortedSet

0 投票する
3 に答える
15455 参照

math - バイナリランレングスエンコーディング

Base64で短い表現を生成したいコンテンツのWebフォームがあります。このフォームには、特に264個のバイナリ値のリストが含まれています。その大部分はいつでも0になります。(地理マップ上の地域を表します)。Base64でも、この264ビットの数値は長くて威圧的な文字列を生成します。可能な限り効率的にランレングスエンコーディングを実装したいと思います。これを手伝ってくれませんか。バイナリRLEをグーグルで検索しましたが、何の役にも立ちません。

私がこれまでに試したことは、10進数のカウントと0と1の間の変化を示す区切り文字として「A」を使用してバイナリ文字列でRLEを実行し、結果をbase11からbase64に変換することです。例:

になります

これは次のようになります

または、ベース62では、

それは良いことですが、それでも私が何か間違ったことをしているのかどうか疑問に思うしかありません-数字「A」を区切り文字として使用するのがこれを行うための最良の方法ですか?

そして別の更新:

@comingstormのおかげで、圧縮された文字列をもう少し短くしました。

コメントで述べたように、実際の使用例では、通常、文字列がさらに短くなります。

0 投票する
2 に答える
1680 参照

c++ - シンボルのシーケンス用のC++およびRLE

シンボルのシーケンスでRLEを使用する方法に問題があります。

たとえば、次のような文字列でRLEエンコーディングを実行できます。

これは次のように変換されます。

しかし、私は次のような文字列に対してRLEを実行したいと思います

これは次のように変換されます。

それに到達する方法はありますか?長い文字列は常に角かっこで囲まれるため、この作業は少し簡単になります。C ++でこれを行うためのアドバイスを与えることができますか?
角かっこを使用するよりも値を格納するためのより良い方法がある場合は、私をお勧めした場合にも役立ちます。

0 投票する
1 に答える
423 参照

java - RLE シーケンス、値の設定

任意の RLE シーケンスがあるとします。(知らない人のために説明すると、RLE は [4 4 4 4 4 6 6 1 1] のような配列を [(5,4) (2,6) (2,1)] に圧縮します。最初に a の数が来ます。実行中の特定の整数、次に数値自体)。

全体を解凍せずに特定のインデックスに値を設定するアルゴリズムを決定するにはどうすればよいですか? たとえば、set(0,1) を実行すると、RLE は [(1,1) (4,4) (2,6) (2,1)] になります。(set では、最初の値はインデックス、2 番目の値は値です)

また、この圧縮されたシーケンスをエントリの ArrayList に分割しました。つまり、各エントリは次のいずれかです: (1,1) 量と値があります。

私はこれを行うための効率的な方法を見つけようとしていますが、今のところ、クリーンと見なされるにはあまりにも多くの if ステートメントを持つメソッドを考えることができます。非常に多くのバリエーションがあります。たとえば、指定された値が既存のエントリを分割する場合、または既存のエントリと同じ値を持つ場合など...

どんな助けでも大歓迎です。私は現在アルゴリズムに取り組んでいます。ここにその一部があります:

ご覧のとおり、これはますますずさんになっています...

ありがとう!

0 投票する
1 に答える
494 参照

c++ - RLE: 2 つのシンボルでエンコード

「A1A1B7B7B7B7」のようなシーケンスを「#A12#B74」のような文字列にエンコードする RLE エンコード関数を作成しました。

ただし、関数は必要なほど高速ではありません。これは function の 2 番目のバージョンです。既に改善して高速化していますが、それでも遅すぎます。改善する方法はありますか?アイデア不足です。

0 投票する
3 に答える
11528 参照

matlab - 一連の連続した数字 (異なる長さ)

誰かがこれを行う簡単な方法を教えてくれたら幸いです。MATLABに次のようなベクトルがあるとしましょう

連続した数「2」のシリーズとそれらのシリーズの長さを見つけたいです。

2 番は で簡単に見つけることができますx=find(d==2)。しかし、私が望むのは、一連の連続する 2 のすべての長さを含むベクトルを取得することです。つまり、この場合の結果は次のようなベクトルになります。

私を助けてくれる人はいますか?