如何記住這大量的數字


這些數的范圍都在0-255以內,
如何給他們取一個簡短的唯一標示符來表示這么多數,像MD5值那樣。。。(而且不能太長,至少要<128位以下)

77 90 144 0 3 0 0 0 4 0 0 0 255 255 0 0 184 0 0 0 0 0 0 0 64 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 224 0 0 0 14 31 186 14 0 180 9 205 33 184 1 76 205 33 84 104 105 115 32 112 114 111 103 114 97 109 32 99 97 110 110 111 116 32 98 101 32 114 117 110 32 105 110 32 68 79 83 32 109 111 100 101 46 13 13 10 36 0 0 0 0 0 0 0 7 218 119 62 83 224 119 102 13 220 119 159 106 218 119 174 73 219 119 123 85 219 119 0 0 0 0 243 88 254 119 9 84 254 119 180 245 209 119 14 246 209 119 200 241 212 119 189 26 211 119 171 174 210 119 127 175 209 119 176 177 210 119 142 144 210 119 156 177 210 119 59 234 209 119 202 77 210 119 246 202 214 119 31 143 210 119 31 245 209 119 108 153 210 119 246 139 209 119 30 148 209 119 118 238 210 119 237 66 210 119 122 21 211 119 168 3 211 119 195 201 210 119 54 158 209 119 85 150 210 119 36 116 210 119 155 146 209 119 52 101 214 119 22 146 209 119 210 144 209 119 194 26 210 119 156 143 209 119 158 178 210 119 7 149 210 119 171 71 210 119 243 153 210 119 123 31 211 119 0 0 0 0 102 136 1 0 116 136 1 0 0 0 0 0 157 123 51 118 43 124 51 118 132 157 52 118 0 0 0 0 164 241 249 76 216 35 254 76 219 241 249 76 103 157 251 76 235 238 249 76 172 23 254 76 124 83 251 76 148 92 251 76 149 214 252 76 79 238 252 76 126 158 251 76 174 45 251 76 154 158 251 76 206 158 251 76 200 249 251 76 136 209 249 76 107 128 252 76 204 127 252 76 97 126 252 76 148 126 252 76 13 95 251 76 54 208 249 76 227 126 252 76 184 126 252 76 47 128 252 76 249 128 252 76 182 158 251 76 176 114 252 76 0 0 0 0 13 255 146 124 164 0 147 124 0 0 0 0 126 5 155 118 70 238 154 118 123 239 154 118 51 187 157 118 0 0 0 0 132 1 243 113 171 59 242 113 238 1 243 113 75 1 243 113 212 156 242 113 198 156 242 113 224 156 242 113 250 4 243 113 202 248 242 113 55 254 242 113 77 59 242 113 17 249 242 113 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 20 82 2 72 0 0 0 0 2 0 0 0 36 0 0 0 160 37 0 0 160 25 0 0 72 0 69 0 88 0 0 0 82 0 101 0 103 0 69 0 100 0 105 0 116 0 95 0 72 0 101 0 120 0 68 0 97 0 116 0 97 0 0 0 37 0 48 0 170 0 187 183 35 83 0 121 0 115 0 76 0 105 0 115 0 116 0 86 0 105 00 1 237 251 0 1 50 107 1 1 162 251 0 1 177 251 0 1 192 251 0 1 50 107 1 1 139 250 0 1 82 250 0 1 105 250 0 1 50 107 1 1 50 107 1 1 50 107 1 1 50 107 1 1 50 107 1 1 50 107 1 1 50 107 1 1 82 237 0 1 207 251 0 1 222 251 0 1 237 251 0 1 248 248 0 1 162 251 0 1 177 251 0 1 192 251 0 1 195 247 0 1 139 250 0 1 82 250 0 1 105 250 0 1 255 239 0 1 213 240 0 1 245 252 0 1 53 240 0 1 96 240 0 1 132 240 0 1 166 240 0 1 252 251 0 1 86 242 0 1 32 241 0 1 78 230 135 12 122 59 210 17 185 224 0 192 79 216 219 247 216 204 214 23 123 59 210 17 185 224 0 192 79 216 219 247 

21 个解决方案

#1


是對這里面的每一個數取md5
還是對所有的取一個md5?

#2


無聊的數字
干嗎要記

#3


這么多數還有很多重復,直接計算md5肯定不行。
重復的數應該怎么算,還不如直接創建一個很大的數組,表示某個數的位置。位置的唯一的。

#4


使用7z壓縮算法,你這些數字壓縮率能達到10%以下!

#5


好多數字哦
試試霍夫曼編碼

#6


static unsigned char[500]={
...//把全部值列在這里
...
...
...
}

#7


vector<unsign char>

#8


壓縮啊

#9


沒看懂LZ的意思,隨手寫了個。

# include <iostream>
# include <fstream>

using namespace std;

int main()
{
ifstream in("data.txt");
int data[1024], tmp;
int i = 0;
while (in >> tmp && in)
data[i++] = tmp;
in.close();
cout << "there are " << i << " numbers" << endl;
for (int j = 0; j < i; j++)
{
cout << hex << data[j] << ' ';
if (j % 16 == 0)
cout << endl;
}

return 0;
}

#10


比如,上面那些數字的唯一標識是:“9e97b34c208c69a75f35673be9b9d397”
那么“9e97b34c208c69a75f35673be9b9d397”就表示上面那些數,
我的意思就是給你“9e97b34c208c69a75f35673be9b9d397”這個值,
你能不能知道是上面那些數?

#11


《記憶術》[日]高木重朗
圖書館借吧,買不到了。

#12


引用 6 樓 xjh53759299 的回復:
static unsigned char[500]={
...//把全部值列在這里
...
...
...
}


頂這個方法。
建個表,用時查索引不就完了。

#13


能有多少數啊?上億嗎?  否則想用什么裝就用什么裝嘛~ 別想多了

#14


mark

#15


引用 10 樓 suyio 的回復:
比如,上面那些數字的唯一標識是:“9e97b34c208c69a75f35673be9b9d397”
那么“9e97b34c208c69a75f35673be9b9d397”就表示上面那些數,
我的意思就是給你“9e97b34c208c69a75f35673be9b9d397”這個值,
你能不能知道是上面那些數?


這個當然不行,或者說概率極小
Hash 和 Md5  都是單向加密函數  是不可逆的

#16


10進制:65535
表示成二進制,我們要記16個數:1111 1111 1111 1111
表示成十進制,我們要記5個數:65535
表示成十六進制,我們要記4個數:ff ff

int system256[256]
for(int i=0;i<256;i++){system256[i]=i;}
如果表示成256進制,我們只需要記兩個數:system256[255] system256[255]

如果newtype小學學的是256進制,最開始學的不是九九乘法表,而是255 255乘法表
雖然學的時候會很吃力,
可是掌握后,正常人需要記100位的10進制數,newtype只需要記m個數,對於m解釋如下:
256的m次方大於10的100次方,256的m-1次方小於10的100次方

如果學的是65536進制,哎

其實這些對於電腦都不是問題

最開始的紙帶,只能用打孔和不打孔表示二進制,方便電腦識別
現在有N多種方法可以讓電腦識別0~f
所以我們可以不再用打孔的方法記錄數據,而是在紙帶上寫下0~f來記錄
從二進制轉換為16進制,可以讓紙帶的容量變為以前的4倍

所以理論上
一個原本4G的老硬盤,硬件條件不變的情況下
可以因為一個轉換算法,變成1T的新硬盤

#17


引用 16 樓 teatimel 的回復:
10進制:65535
表示成二進制,我們要記16個數:1111 1111 1111 1111
表示成十進制,我們要記5個數:65535
表示成十六進制,我們要記4個數:ff ff

int system256[256]
for(int i=0;i<256;i++){system256[i]=i;}
如果表示成256進制,我們只需要記兩個數:system256[255] system2……

有道理啊!

#18


該回復於2010-08-04 17:46:40被版主刪除

#19


該回復於2010-08-04 17:46:40被版主刪除

#20


該回復於2010-08-04 17:46:40被版主刪除

#21


不可能唯一,只可能讓它重復的概率盡可能小,這也就是hash或者一些校驗編碼的基本思想

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com