1

JSON にシリアライズしたいデータ型があります。データ型には一連の整数が含まれます。プロジェクトには他の制約があるため、JSON 以外のもの (YAML など) を操作するのは面倒です。O(1) ルックアップが本当に必要です。

ここで汚い小さなハックを実行し、JSON オブジェクトを使用して、各キーと値のペアの値にダミーを使用できることに気づきました。

{"1": null, "45": null, "-93": null}

しかし、簡単なオンライン検索では、これに関する前例は見当たりません。わかりました、それは恐ろしいです、そしてはい、それはメモリを浪費していますが、愚かなラッパーを書かなくても、私が望むものを与えるようです. 検索したときにすぐにこれに遭遇しないという事実は、何かが欠けているのではないかと疑っています。

それで、私が上で述べた恐ろしさと記憶の愚かさ以外に、これを避ける他の理由はありますか? (もちろん、ターゲット言語のオブジェクト型の基になる実装には、キーの O(1) チェックがあることを当然のことと考えています)。

4

4 に答える 4

1

JSON は「軽量データ交換フォーマット」であり、クエリ データ構造ではありません。大量のデータを転送する場合、数値の単純な配列は、上記の JSON よりもはるかに少ないスペースを占有します。その後、必要なデータ構造に変換でき、JSON 仕様に準拠する必要はありません。キーと値のペア形式を使用して大きなファイルを転送する時間は、後で構造を変換する時間よりもはるかに長いでしょう。

于 2013-04-26T15:15:14.753 に答える
0

それらをソートされた配列に入れて、この underscore.js 関数を使用してバイナリ検索を行うことができます: http://underscorejs.org/#indexOf

例:

var array = [1, 45, -93, 20, 17];
var sorted = array.sort();

alert(_.indexOf(sorted, 17, true) >= 0)
alert(_.indexOf(sorted, 18, true) >= 0)

オリジナルのアイデアを実行することもできますが、JSON として記述する必要はありません。文字列をキーとして使用する必要はありません。数値をキーとして使用できます。どちらが速いかわかりません。

于 2013-04-23T21:17:37.770 に答える
0

この質問を書いているときに考えもしなかったことの 1 つは、数値を文字列に変換し、おそらくルックアップ時にハッシュする費用です。もちろん、これはまだセットのサイズでO(1)ですが、これらの文字列操作のすべてがO(log(n))バイナリよりも小さいものになる前に、 nはかなり大きくする必要があると思います整数配列を検索します。

于 2013-04-24T15:42:21.217 に答える