こうやって01本

3161 ワード

今日は何かを作っているうちに、面白いところをいくつか見つけて、みんなと分かち合いました.いくつかの小さな問題から始めます
1つの年齢層を記録してどのように記録して、「50~70」のような表現ができればいいですか?
簡単だと言えるかもしれませんが、2つのフィールド、1つのstart=>開始年齢、1つのend=>終了年齢、さらには1つのフィールドでstart|endのようなフォーマットを使用して、真ん中を1つの非数字で区切ったり、start|start-endを使用したりして、はははは、どうせ方法はたくさんありますが、この場合、アップグレードを要求すると、10~20、25、29~40の年齢を表す必要があります.どう表現しますか.もちろん文字列で表すこともできます.例えば、10-20|25|29-40で、自分でルールを決めて表すことができますが、この表現方法は最適化できますか.答えは肯定的です.
重複しない年齢区間を01文字列で表すことができ、デフォルトでは100個の0、1~100歳の位置を示し、1であればその年齢があり、ゼロであればその年齢がないことを示す.説明のために、ここでは10個のゼロを使用して、1~10歳を表す.
0111111000=>2~7歳を表す
0110111010=>2~3、5~7、9歳を表す
ははは、とても便利で表示することができるかどうか、その上とても理解しやすくて、もちろん、このように彼の欠点もあって、このように表示するのはとても便利で、しかし使うのは确かに不便で、计算する必要があります.
1、2、3、…から、199、200の中でランダムにいくつかの数を選んで、どのように表しますか?
もちろん、この方法には多くの種類があります.例えば、文字列で表し、各数字の間を非数字で分割します.このように、1|5|100|199です.私が言いたいのはやはり01列で表して、上の1~200のように、その中の一部を選択するという問題で、私は200の位置の文字列を使って、各位置は0あるいは1で、各位置はそれに対応する数字を置いて、このようにして、またこれらの情報を01文字列として表しました.やはり0~10の例を挙げると
0111111000=>2、3、4、5、6、7を表す
0110111010=>2、3、5、6、7、9を表す
もちろん誰かが言うかもしれませんが、私が表示したいデータは連続していません.例えば、私が表示したいデータは
  1926、19658、12、5638、8975、965、369、5126、5698、14556
上の数は大きくて小さくて不規則で、全体的に10を超えない数は彼らの中で最大の数の位置を使わないことを示しましょう(例えばここで19658個の0)、もちろんできません.このような状況はマッピングを使用して、マッピング関係は以下の通りです.
1 => 1926,
2 => 19658,
3 => 12,
4 => 5638,
5 => 8975,
6 => 965,
7 => 369,
8 => 5126,
9 => 5698,
10 => 14556

このとき、1926、12、5698といういくつかの選択を表す場合は、以下の01列を使用します.
  1010000010
あなたも発見したかもしれませんが、これは流量を節約する効果を果たすことができます.私たちは双方が対話している間に、マッピング関係を確立し、ネットワークが伝達されるときは本当のデータを伝達する必要はありません.対応する01列を伝達するだけでいいです.
もちろん、これは多くのものを表すことができます.例えば、私は一日の时間を5分もしないで1段に分けて、全部で288段あります.この时、この中からランダムに5分段を選んで、288個の自分の長さの01列でこれがいいかどうかを表します.ハハ.
場合によってはこのような01列の表現が望ましいので、流量を節約する効果がある場合があります.
この表現はビットマップと呼ばれていますが、『プログラミング珠玉』という本では
 
本文の著作権は著者iforever([email protected])の所有であり、著者本人の同意を得ずにいかなる形式の転載を禁止し、文章を転載した後、文章のページの明らかな位置で著者と原文の接続を与えなければならない.