問題タブ [zigzag-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.
language-agnostic - ジグザグデコード
googleプロトコルバッファエンコーディングの概要では、「ジグザグエンコーディング」と呼ばれるものが導入されています。これは、大きさが小さい符号付き数値を取得し、大きさが小さい一連の符号なし数値を作成します。
例えば
等々。彼らがこれのために与えるエンコーディング関数はかなり賢いです、それは次のとおりです:
これがどのように機能するかは理解していますが、これを逆にして符号付き32ビット整数にデコードする方法を一生理解することはできません。
protocol-buffers - Googleプロトコルバッファ:ZigZagエンコーディング
エンコーディングの「署名されたタイプ」から-プロトコルバッファ-Googleコード:
ZigZagエンコーディングは、符号付き整数を符号なし整数にマップするため、絶対値が小さい(たとえば、-1)数値もvarintエンコード値が小さくなります。これは、正と負の整数を前後に「ジグザグ」する方法で行われるため、-1は1としてエンコードされ、1は2としてエンコードされ、-2は3としてエンコードされ、以下同様に続きます。次の表で確認できます。
言い換えると、各値nは次を使用してエンコードされます。
(n << 1) ^ (n >> 31)
sint32sの場合、または
(n << 1) ^ (n >> 63)
64ビットバージョンの場合。
テーブルの内容はどのように(n << 1) ^ (n >> 31)
等しくなりますか?私はそれがポジティブに機能することを理解していますが、それはたとえば-1にどのように機能しますか?-1は1111 1111
、ではないでしょ(n << 1)
う1111 1110
か?(ネガのビットシフトはどの言語でもうまく形成されていますか?)
それでも、数式を使用して実行すると(-1 << 1) ^ (-1 >> 31)
、32ビット整数を想定する1111 1111
と40億になりますが、表では1が必要であると考えています。
python - Python でジグザグ配列を作成する関数
位置の北と南の距離を表す正と負の整数の配列を作成しようとしています - 配列の要素をジグザグの順序で表示する必要があります。
つまり、最大のメンバーが最初に表示され、最小のメンバーが 2 番目に表示され、残りの要素は、最大のメンバーから減少する大きなメンバーと、最小のメンバーから増加する小さなメンバーとの間で交互に表示されます。
つまり、配列 [1, 3, 6, 9, -3] は [9, -3, 6, 1, 3] になります。
wiggleArrangeArray
n 個の整数の整数配列を 1 つの引数として受け取るfunction を完成させようとしています。
なんて言っていいのかわからない
「配列内の項目が配列内の他の項目よりも大きい場合は、最初に表示します。」
「項目が配列内の他の項目よりも小さい場合は、2 番目に表示します。」
「次に大きい数字と次に小さい数字を交互に」
可能であれば助けてください。これはC++のソリューションへのリンクですが、Pythonで必要です。ありがとう。
編集:関数は次のテストで動作する必要があります: