向上计数 "broadly":不是 0,1,2,..,9,10,11,..,99 而是 00, 01, 10, 11, 02, 12, 20, 21, 22, 03, . ., 99
Counting up "broadly": Not 0,1,2,..,9,10,11,..,99 but 00, 01, 10, 11, 02, 12, 20, 21, 22, 03, .., 99
当计数器由固定数量的数字(标题中的 2)组成时,标准 counting-up 通过从最低有效数字递增到最高有效数字并在溢出时重置它来工作。
我想以不同的方式计数:以 10 为基数的 4 位数字将以 2 为基数递增,直到发生溢出回到 0000
,但基数增加到 3 为底数虽然 省略了 之前计算的数字,因此只继续 0002, 0012, 0020, 0021, 0022, 0102, 0112, 0120, 0121, 0122, 0200, 0201, 0202, 0210, 0211, ...
(固定!) 和所有其他数字至少 one 2 in. 在 2222
时切换到 base-4,因此所有 4 位数字组合至少包含 one 3。最后,从 0000
到 9999
的所有数字都在这个序列中,但顺序不同。
这样 9 就不会出现在序列的最后 10% 之前。
理论上如何实现这样的计数器(没有天真的 digit-presence1 检查)?我可以轻松跳转到此排序的 n-th 元素或倒数吗?是否有实际名称而不是 "broad counting"?
1:A "naive digit-presence check" 将以 2 为基数计数,当切换到 3 进制时,将检查所有生成的数字以确保至少在 2在他们里面。切换到基数 4 后(即 2222
-0003
步骤),所有数字必须至少包含一个 3
。因此,在 2222
之后,数字 0000
、0001
、0002
被省略,因为它们缺少 3,因此之前已被枚举。依此类推,base-N表示数字N-1必须至少出现一次.
我制作了一个电子表格来寻找模式。下面显示了以 3 为基数的那些和前几个以 4 为基数的,尽管我的电子表格更高,更清楚地显示了模式。
在'table'中(抱歉缺少table格式),d3到d0是4位数字,str是相同数字的字符串表示,b是当前数字base,d 是深度 - 没有前导零的数字的数量。 pos 是列表中的位置。 (dec) 是显示数字的十进制表示,其基数以正常方式解释,由于存在重复,因此证明是无用的。
请检查 table 以确保我已正确解释您的要求。
一些模式正在出现,例如给定基数的每个深度的条目数与基数之间似乎存在某种 exponential-ish 关系。我现在没有时间花在这上面,但是当我在第二天左右有机会时会进一步编辑这个答案,除非有人抢先一步。
至于这个名字,我不知道。但是请注意,您允许的位数对结果的排序有很大影响。另一方面,理论上没有必要在 9 处停止,数学会继续到您喜欢的任何底数;如果您愿意,您可以像我们通常对十六进制计数所做的那样使用 A、B、C 等。此延续仅受您允许的符号数量限制。
d3
d2
d1
d0
str
b
d
pos
(dec)
0
0
0
0
0000
1
0
0
0
0
0
0
1
0001
2
1
1
1
0
0
1
0
0010
2
2
2
2
0
0
1
1
0011
2
2
3
3
0
1
0
0
0100
2
3
4
4
0
1
0
1
0101
2
3
5
5
0
1
1
0
0110
2
3
6
6
0
1
1
1
0111
2
3
7
7
1
0
0
0
1000
2
4
8
8
1
0
0
1
1001
2
4
9
9
1
0
1
0
1010
2
4
10
10
1
0
1
1
1011
2
4
11
11
1
1
0
0
1100
2
4
12
12
1
1
0
1
1101
2
4
13
13
1
1
1
0
1110
2
4
14
14
1
1
1
1
1111
2
4
15
15
0
0
0
2
0002
3
1
16
2
0
0
1
2
0012
3
2
17
5
0
0
2
2
0022
3
2
18
8
0
1
0
2
0102
3
3
19
11
0
1
1
2
0112
3
3
20
14
0
1
2
2
0122
3
3
21
17
1
0
0
2
1002
3
4
22
29
1
0
1
2
1012
3
4
23
32
1
0
2
2
1022
3
4
24
35
1
1
0
2
1102
3
4
25
38
1
1
1
2
1112
3
4
26
41
1
1
2
2
1122
3
4
27
44
2
0
0
2
2002
3
4
28
56
2
0
1
2
2012
3
4
29
59
2
0
2
2
2022
3
4
30
62
2
1
0
2
2102
3
4
31
65
2
1
1
2
2112
3
4
32
68
2
1
2
2
2122
3
4
33
71
2
2
2
2
2222
3
4
34
80
0
0
0
3
0003
4
1
35
3
0
0
1
3
0013
4
2
36
7
0
0
2
3
0023
4
2
37
11
0
0
3
3
0033
4
2
38
15
0
1
0
3
0103
4
3
39
19
0
1
1
3
0113
4
3
40
23
因此,首先您需要按顺序排列所有数字为 0 的数字。即只有 00
然后所有数字为 0,1 的数字:00、01、10、11 但不包括 00
然后所有数字为 0、1、2 的数字:00、01、02、10、11、12、20、21、22 但不包括 00、01、10、11,即所有没有数字的数字数字 2.
通过遍历所有组合并排除已经打印的组合来实现是最简单的。
for(maxdigit=0; maxdigit<10; ++maxdigit) {
for(digit1 = 0; digit1 <= maxdigit; ++digit1) {
for(digit2 = 0; digit2 <= maxdigit; ++digit2) {
for(digit3 = 0; digit3 <= maxdigit; ++digit3) {
for(digit4 = 0; digit4 <= maxdigit; ++digit4) {
if( digit1 < maxdigit && digit2 < maxdigit
&& digit3 < maxdigit && digit4 < maxdigit) continue;
print( digit1, digit2, digit3, digit4);
}}}}
}
要了解其工作原理,您可以在网格中排列 2 位数版本
00 | 01 | 02 | 03 | 04
----- | | |
10 11 | 12 | 13 | 14
---------- | |
20 21 22 | 23 | 24
--------------- |
30 31 32 33 | 34
--------------------
40 41 42 43 44
注意每组数字如何形成 "shells"。在第一个 shell 我们只有一个数字,第一个和第二个 shell 有 4 = 2^2 个数字,第一个,第二个和第三个 shell 有 9 = 3^2 个数字等等
我们可以用它来计算每个 shell 中有多少个数字。在两位数的情况下是 1^2=1, 2^2-1^2=3, 3^2-2^2=5, 4^2-3^2=7.
用三位数代替它的立方体。 1^3=1, 2^3-1^3=9-1 = 8, 3^3-2^3=27-9 = 18, 等等
四位数字的四次方。
通过考虑 shells,我们可以找到一种更有效的做事方式。在 3 位数的情况下,我们有 shell 个立方体,需要计算出通过 shell 的路径。除非你有大量的数字,否则我不确定是否有很多收获。
要获得此顺序,请考虑 3 位数的情况,并令 x、y、z 依次为数字。如果我们正在查看第 k 个 shell,我们希望获得三个平面 x=k、y=k、z=k 上的所有解。这些解决方案分为 x
在伪代码中
for(shell=0;shell<=9;++shell) {
// Do the L shaped part
for(x=0;x<shell;++x) {
// The the y-leg, which has z=k
for(y=0;y<shell;++y)
print(x,y,shell);
// Do the z-leg, which has y=k
for(z=0;z<=shell;++z)
print(x,shell,z);
}
// Now the x=shell face
for(y=0;y<=shell;++y)
for(z=0;z<=shell;++z)
print(shell,y,z);
}
应该可以将其推广到 d 维。让我们这里的坐标为 x1, x2, ..., xd。第 k 个 shell 中的解将位于 (d-1) 维超平面 x1=k, x2=k, ..., xd=k 上。我们再次通过 x1=0 循环到 x1=k-1,x1=0 问题与 d-1 维问题相同,这表明采用递归方法。
// solve the dim-dimensional problem for
// prefix the output with prefix
function solve(int shell,int dim,String prefix) {
if(dim==1) {
// only one solution with the last digit being the shell
print(prefix+shell);
return;
}
// loop through the first digit
for(int x=0;x<shell;++x) {
String prefix2 = prefix + x;
solve(shell,dim-1,prefix2);
}
// Now to the x=k hypercube,
// need to do this in a separate recursion
String prefix2 = prefix + shell;
hypercube(shell,dim-1,prefix2);
}
// all solutions in dim dimensions with a given prefix
function hypercube(int shell,int dim,String prefix) {
if(dim==1) {
for(int x=0;x<=shell;++x)
println(prefix+x);
}
else {
for(int x=0;x<=shell;++x) {
String prefix2 = prefix + x;
hypercube(shell,dim-1,prefix2);
}
}
}
// Now call, here we do the 4 digit version
for(shell=0;shell<=9;++shell) {
solve(shell,4,"");
}
这里是 n 到 4 的所有 4 位 base(n) 数字的 table,省略了前一列中已经列出的所有数字。在这种排列中,一些模式是显而易见的,而且看起来您将不得不跳过以找到下一个未使用的最多的模式是 n-1(忽略零)。您还可以从 n-1 开始计算每个新碱基。给定基数 n 中的大多数数字都是可用的,包括从 (n-1),(n-2)(0)(0) 向上的所有数字。
这种安排表明,朴素的消除方法可能可以找到下一个或上一个数字,但是,再一次,你必须更多地从算法上看模式来回答像 'what does the one at (x) look like' 或'what ordinal position is (yyyy) at' 没有循环。
+-----+------+------+------+------+
| | - | 2 | 3 | 4 |
+-----+------+------+------+------+
| 0 | 0000 | | | |
| 1 | | 0001 | | |
| 2 | | 0010 | 0002 | |
| 3 | | 0011 | | 0003 |
| 4 | | 0100 | | |
| 5 | | 0101 | 0012 | |
| 6 | | 0110 | 0020 | |
| 7 | | 0111 | 0021 | 0013 |
| 8 | | 1000 | 0022 | |
| 9 | | 1001 | | |
| 10 | | 1010 | | |
| 11 | | 1011 | 0102 | 0023 |
| 12 | | 1100 | | 0030 |
| 13 | | 1101 | | 0031 |
| 14 | | 1110 | 0112 | 0032 |
| 15 | | 1111 | 0120 | 0033 |
| 16 | | | 0121 | |
| 17 | | | 0122 | |
| 18 | | | 0200 | |
| 19 | | | 0201 | 0103 |
| 20 | | | 0202 | |
| 21 | | | 0210 | |
| 22 | | | 0211 | |
| 23 | | | 0212 | 0113 |
| 24 | | | 0220 | |
| 25 | | | 0221 | |
| 26 | | | 0222 | |
| 27 | | | | 0123 |
| 28 | | | | 0130 |
| 29 | | | 1002 | 0131 |
| 30 | | | | 0132 |
| 31 | | | | 0133 |
| 32 | | | 1012 | |
| 33 | | | 1020 | |
| 34 | | | 1021 | |
| 35 | | | 1022 | 0203 |
| 36 | | | | |
| 37 | | | | |
| 38 | | | 1102 | |
| 39 | | | | 0213 |
| 40 | | | | |
| 41 | | | 1112 | |
| 42 | | | 1120 | |
| 43 | | | 1121 | 0223 |
| 44 | | | 1122 | 0230 |
| 45 | | | 1200 | 0231 |
| 46 | | | 1201 | 0232 |
| 47 | | | 1202 | 0233 |
| 48 | | | 1210 | 0300 |
| 49 | | | 1211 | 0301 |
| 50 | | | 1212 | 0302 |
| 51 | | | 1220 | 0303 |
| 52 | | | 1221 | 0310 |
| 53 | | | 1222 | 0311 |
| 54 | | | 2000 | 0312 |
| 55 | | | 2001 | 0313 |
| 56 | | | 2002 | 0320 |
| 57 | | | 2010 | 0321 |
| 58 | | | 2011 | 0322 |
| 59 | | | 2012 | 0323 |
| 60 | | | 2020 | 0330 |
| 61 | | | 2021 | 0331 |
| 62 | | | 2022 | 0332 |
| 63 | | | 2100 | 0333 |
| 64 | | | 2101 | |
| 65 | | | 2102 | |
| 66 | | | 2110 | |
| 67 | | | 2111 | 1003 |
| 68 | | | 2112 | |
| 69 | | | 2120 | |
| 70 | | | 2121 | |
| 71 | | | 2122 | 1013 |
| 72 | | | 2200 | |
| 73 | | | 2201 | |
| 74 | | | 2202 | |
| 75 | | | 2210 | 1023 |
| 76 | | | 2211 | 1030 |
| 77 | | | 2212 | 1031 |
| 78 | | | 2220 | 1032 |
| 79 | | | 2221 | 1033 |
| 80 | | | 2222 | |
| 81 | | | | |
| 82 | | | | |
| 83 | | | | 1103 |
| 84 | | | | |
| 85 | | | | |
| 86 | | | | |
| 87 | | | | 1113 |
| 88 | | | | |
| 89 | | | | |
| 90 | | | | |
| 91 | | | | 1123 |
| 92 | | | | 1130 |
| 93 | | | | 1131 |
| 94 | | | | 1132 |
| 95 | | | | 1133 |
| 96 | | | | |
| 97 | | | | |
| 98 | | | | |
| 99 | | | | 1203 |
| 100 | | | | |
| 101 | | | | |
| 102 | | | | |
| 103 | | | | 1213 |
| 104 | | | | |
| 105 | | | | |
| 106 | | | | |
| 107 | | | | 1223 |
| 108 | | | | 1230 |
| 109 | | | | 1231 |
| 110 | | | | 1232 |
| 111 | | | | 1233 |
| 112 | | | | 1300 |
| 113 | | | | 1301 |
| 114 | | | | 1302 |
| 115 | | | | 1303 |
| 116 | | | | 1310 |
| 117 | | | | 1311 |
| 118 | | | | 1312 |
| 119 | | | | 1313 |
| 120 | | | | 1320 |
| 121 | | | | 1321 |
| 122 | | | | 1322 |
| 123 | | | | 1323 |
| 124 | | | | 1330 |
| 125 | | | | 1331 |
| 126 | | | | 1332 |
| 127 | | | | 1333 |
| 128 | | | | |
| 129 | | | | |
| 130 | | | | |
| 131 | | | | 2003 |
| 132 | | | | |
| 133 | | | | |
| 134 | | | | |
| 135 | | | | 2013 |
| 136 | | | | |
| 137 | | | | |
| 138 | | | | |
| 139 | | | | 2023 |
| 140 | | | | 2030 |
| 141 | | | | 2031 |
| 142 | | | | 2032 |
| 143 | | | | 2033 |
| 144 | | | | |
| 145 | | | | |
| 146 | | | | |
| 147 | | | | 2103 |
| 148 | | | | |
| 149 | | | | |
| 150 | | | | |
| 151 | | | | 2113 |
| 152 | | | | |
| 153 | | | | |
| 154 | | | | |
| 155 | | | | 2123 |
| 156 | | | | 2130 |
| 157 | | | | 2131 |
| 158 | | | | 2132 |
| 159 | | | | 2133 |
| 160 | | | | |
| 161 | | | | |
| 162 | | | | |
| 163 | | | | 2203 |
| 164 | | | | |
| 165 | | | | |
| 166 | | | | |
| 167 | | | | 2213 |
| 168 | | | | |
| 169 | | | | |
| 170 | | | | |
| 171 | | | | 2223 |
| 172 | | | | 2230 |
| 173 | | | | 2231 |
| 174 | | | | 2232 |
| 175 | | | | 2233 |
| 176 | | | | 2300 |
| 177 | | | | 2301 |
| 178 | | | | 2302 |
| 179 | | | | 2303 |
| 180 | | | | 2310 |
| 181 | | | | 2311 |
| 182 | | | | 2312 |
| 183 | | | | 2313 |
| 184 | | | | 2320 |
| 185 | | | | 2321 |
| 186 | | | | 2322 |
| 187 | | | | 2323 |
| 188 | | | | 2330 |
| 189 | | | | 2331 |
| 190 | | | | 2332 |
| 191 | | | | 2333 |
| 192 | | | | 3000 |
| 193 | | | | 3001 |
| 194 | | | | 3002 |
| 195 | | | | 3003 |
| 196 | | | | 3010 |
| 197 | | | | 3011 |
| 198 | | | | 3012 |
| 199 | | | | 3013 |
| 200 | | | | 3020 |
| 201 | | | | 3021 |
| 202 | | | | 3022 |
| 203 | | | | 3023 |
| 204 | | | | 3030 |
| 205 | | | | 3031 |
| 206 | | | | 3032 |
| 207 | | | | 3033 |
| 208 | | | | 3100 |
| 209 | | | | 3101 |
| 210 | | | | 3102 |
| 211 | | | | 3103 |
| 212 | | | | 3110 |
| 213 | | | | 3111 |
| 214 | | | | 3112 |
| 215 | | | | 3113 |
| 216 | | | | 3120 |
| 217 | | | | 3121 |
| 218 | | | | 3122 |
| 219 | | | | 3123 |
| 220 | | | | 3130 |
| 221 | | | | 3131 |
| 222 | | | | 3132 |
| 223 | | | | 3133 |
| 224 | | | | 3200 |
| 225 | | | | 3201 |
| 226 | | | | 3202 |
| 227 | | | | 3203 |
| 228 | | | | 3210 |
| 229 | | | | 3211 |
| 230 | | | | 3212 |
| 231 | | | | 3213 |
| 232 | | | | 3220 |
| 233 | | | | 3221 |
| 234 | | | | 3222 |
| 235 | | | | 3223 |
| 236 | | | | 3230 |
| 237 | | | | 3231 |
| 238 | | | | 3232 |
| 239 | | | | 3233 |
| 240 | | | | 3300 |
| 241 | | | | 3301 |
| 242 | | | | 3302 |
| 243 | | | | 3303 |
| 244 | | | | 3310 |
| 245 | | | | 3311 |
| 246 | | | | 3312 |
| 247 | | | | 3313 |
| 248 | | | | 3320 |
| 249 | | | | 3321 |
| 250 | | | | 3322 |
| 251 | | | | 3323 |
| 252 | | | | 3330 |
| 253 | | | | 3331 |
| 254 | | | | 3332 |
| 255 | | | | 3333 |
+-----+------+------+------+------+
编辑:当你走得更宽时,图案会更清晰。这是以 11 为底数的所有 2 位数(因为......为什么不呢?)
+-----+----+----+----+----+----+----+----+----+----+----+----+
| | - | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
+-----+----+----+----+----+----+----+----+----+----+----+----+
| 0 | 00 | | | | | | | | | | |
| 1 | | 01 | | | | | | | | | |
| 2 | | 10 | 02 | | | | | | | | |
| 3 | | 11 | | 03 | | | | | | | |
| 4 | | | | | 04 | | | | | | |
| 5 | | | 12 | | | 05 | | | | | |
| 6 | | | 20 | | | | 06 | | | | |
| 7 | | | 21 | 13 | | | | 07 | | | |
| 8 | | | 22 | | | | | | 08 | | |
| 9 | | | | | 14 | | | | | 09 | |
| 10 | | | | | | | | | | | 0A |
| 11 | | | | 23 | | 15 | | | | | |
| 12 | | | | 30 | | | | | | | |
| 13 | | | | 31 | | | 16 | | | | |
| 14 | | | | 32 | 24 | | | | | | |
| 15 | | | | 33 | | | | 17 | | | |
| 16 | | | | | | | | | | | |
| 17 | | | | | | 25 | | | 18 | | |
| 18 | | | | | | | | | | | |
| 19 | | | | | 34 | | | | | 19 | |
| 20 | | | | | 40 | | 26 | | | | |
| 21 | | | | | 41 | | | | | | 1A |
| 22 | | | | | 42 | | | | | | |
| 23 | | | | | 43 | 35 | | 27 | | | |
| 24 | | | | | 44 | | | | | | |
| 25 | | | | | | | | | | | |
| 26 | | | | | | | | | 28 | | |
| 27 | | | | | | | 36 | | | | |
| 28 | | | | | | | | | | | |
| 29 | | | | | | 45 | | | | 29 | |
| 30 | | | | | | 50 | | | | | |
| 31 | | | | | | 51 | | 37 | | | |
| 32 | | | | | | 52 | | | | | 2A |
| 33 | | | | | | 53 | | | | | |
| 34 | | | | | | 54 | 46 | | | | |
| 35 | | | | | | 55 | | | 38 | | |
| 36 | | | | | | | | | | | |
| 37 | | | | | | | | | | | |
| 38 | | | | | | | | | | | |
| 39 | | | | | | | | 47 | | 39 | |
| 40 | | | | | | | | | | | |
| 41 | | | | | | | 56 | | | | |
| 42 | | | | | | | 60 | | | | |
| 43 | | | | | | | 61 | | | | 3A |
| 44 | | | | | | | 62 | | 48 | | |
| 45 | | | | | | | 63 | | | | |
| 46 | | | | | | | 64 | | | | |
| 47 | | | | | | | 65 | 57 | | | |
| 48 | | | | | | | 66 | | | | |
| 49 | | | | | | | | | | 49 | |
| 50 | | | | | | | | | | | |
| 51 | | | | | | | | | | | |
| 52 | | | | | | | | | | | |
| 53 | | | | | | | | | 58 | | |
| 54 | | | | | | | | | | | 4A |
| 55 | | | | | | | | 67 | | | |
| 56 | | | | | | | | 70 | | | |
| 57 | | | | | | | | 71 | | | |
| 58 | | | | | | | | 72 | | | |
| 59 | | | | | | | | 73 | | 59 | |
| 60 | | | | | | | | 74 | | | |
| 61 | | | | | | | | 75 | | | |
| 62 | | | | | | | | 76 | 68 | | |
| 63 | | | | | | | | 77 | | | |
| 64 | | | | | | | | | | | |
| 65 | | | | | | | | | | | 5A |
| 66 | | | | | | | | | | | |
| 67 | | | | | | | | | | | |
| 68 | | | | | | | | | | | |
| 69 | | | | | | | | | | 69 | |
| 70 | | | | | | | | | | | |
| 71 | | | | | | | | | 78 | | |
| 72 | | | | | | | | | 80 | | |
| 73 | | | | | | | | | 81 | | |
| 74 | | | | | | | | | 82 | | |
| 75 | | | | | | | | | 83 | | |
| 76 | | | | | | | | | 84 | | 6A |
| 77 | | | | | | | | | 85 | | |
| 78 | | | | | | | | | 86 | | |
| 79 | | | | | | | | | 87 | 79 | |
| 80 | | | | | | | | | 88 | | |
| 81 | | | | | | | | | | | |
| 82 | | | | | | | | | | | |
| 83 | | | | | | | | | | | |
| 84 | | | | | | | | | | | |
| 85 | | | | | | | | | | | |
| 86 | | | | | | | | | | | |
| 87 | | | | | | | | | | | 7A |
| 88 | | | | | | | | | | | |
| 89 | | | | | | | | | | 89 | |
| 90 | | | | | | | | | | 90 | |
| 91 | | | | | | | | | | 91 | |
| 92 | | | | | | | | | | 92 | |
| 93 | | | | | | | | | | 93 | |
| 94 | | | | | | | | | | 94 | |
| 95 | | | | | | | | | | 95 | |
| 96 | | | | | | | | | | 96 | |
| 97 | | | | | | | | | | 97 | |
| 98 | | | | | | | | | | 98 | 8A |
| 99 | | | | | | | | | | 99 | |
| 100 | | | | | | | | | | | |
| 101 | | | | | | | | | | | |
| 102 | | | | | | | | | | | |
| 103 | | | | | | | | | | | |
| 104 | | | | | | | | | | | |
| 105 | | | | | | | | | | | |
| 106 | | | | | | | | | | | |
| 107 | | | | | | | | | | | |
| 108 | | | | | | | | | | | |
| 109 | | | | | | | | | | | 9A |
| 110 | | | | | | | | | | | A0 |
| 111 | | | | | | | | | | | A1 |
| 112 | | | | | | | | | | | A2 |
| 113 | | | | | | | | | | | A3 |
| 114 | | | | | | | | | | | A4 |
| 115 | | | | | | | | | | | A5 |
| 116 | | | | | | | | | | | A6 |
| 117 | | | | | | | | | | | A7 |
| 118 | | | | | | | | | | | A8 |
| 119 | | | | | | | | | | | A9 |
| 120 | | | | | | | | | | | AA |
+-----+----+----+----+----+----+----+----+----+----+----+----+
当计数器由固定数量的数字(标题中的 2)组成时,标准 counting-up 通过从最低有效数字递增到最高有效数字并在溢出时重置它来工作。
我想以不同的方式计数:以 10 为基数的 4 位数字将以 2 为基数递增,直到发生溢出回到 0000
,但基数增加到 3 为底数虽然 省略了 之前计算的数字,因此只继续 0002, 0012, 0020, 0021, 0022, 0102, 0112, 0120, 0121, 0122, 0200, 0201, 0202, 0210, 0211, ...
(固定!) 和所有其他数字至少 one 2 in. 在 2222
时切换到 base-4,因此所有 4 位数字组合至少包含 one 3。最后,从 0000
到 9999
的所有数字都在这个序列中,但顺序不同。
这样 9 就不会出现在序列的最后 10% 之前。
理论上如何实现这样的计数器(没有天真的 digit-presence1 检查)?我可以轻松跳转到此排序的 n-th 元素或倒数吗?是否有实际名称而不是 "broad counting"?
1:A "naive digit-presence check" 将以 2 为基数计数,当切换到 3 进制时,将检查所有生成的数字以确保至少在 2在他们里面。切换到基数 4 后(即 2222
-0003
步骤),所有数字必须至少包含一个 3
。因此,在 2222
之后,数字 0000
、0001
、0002
被省略,因为它们缺少 3,因此之前已被枚举。依此类推,base-N表示数字N-1必须至少出现一次.
我制作了一个电子表格来寻找模式。下面显示了以 3 为基数的那些和前几个以 4 为基数的,尽管我的电子表格更高,更清楚地显示了模式。
在'table'中(抱歉缺少table格式),d3到d0是4位数字,str是相同数字的字符串表示,b是当前数字base,d 是深度 - 没有前导零的数字的数量。 pos 是列表中的位置。 (dec) 是显示数字的十进制表示,其基数以正常方式解释,由于存在重复,因此证明是无用的。
请检查 table 以确保我已正确解释您的要求。
一些模式正在出现,例如给定基数的每个深度的条目数与基数之间似乎存在某种 exponential-ish 关系。我现在没有时间花在这上面,但是当我在第二天左右有机会时会进一步编辑这个答案,除非有人抢先一步。
至于这个名字,我不知道。但是请注意,您允许的位数对结果的排序有很大影响。另一方面,理论上没有必要在 9 处停止,数学会继续到您喜欢的任何底数;如果您愿意,您可以像我们通常对十六进制计数所做的那样使用 A、B、C 等。此延续仅受您允许的符号数量限制。
d3
d2
d1
d0
str
b
d
pos
(dec)
0
0
0
0
0000
1
0
0
0
0
0
0
1
0001
2
1
1
1
0
0
1
0
0010
2
2
2
2
0
0
1
1
0011
2
2
3
3
0
1
0
0
0100
2
3
4
4
0
1
0
1
0101
2
3
5
5
0
1
1
0
0110
2
3
6
6
0
1
1
1
0111
2
3
7
7
1
0
0
0
1000
2
4
8
8
1
0
0
1
1001
2
4
9
9
1
0
1
0
1010
2
4
10
10
1
0
1
1
1011
2
4
11
11
1
1
0
0
1100
2
4
12
12
1
1
0
1
1101
2
4
13
13
1
1
1
0
1110
2
4
14
14
1
1
1
1
1111
2
4
15
15
0
0
0
2
0002
3
1
16
2
0
0
1
2
0012
3
2
17
5
0
0
2
2
0022
3
2
18
8
0
1
0
2
0102
3
3
19
11
0
1
1
2
0112
3
3
20
14
0
1
2
2
0122
3
3
21
17
1
0
0
2
1002
3
4
22
29
1
0
1
2
1012
3
4
23
32
1
0
2
2
1022
3
4
24
35
1
1
0
2
1102
3
4
25
38
1
1
1
2
1112
3
4
26
41
1
1
2
2
1122
3
4
27
44
2
0
0
2
2002
3
4
28
56
2
0
1
2
2012
3
4
29
59
2
0
2
2
2022
3
4
30
62
2
1
0
2
2102
3
4
31
65
2
1
1
2
2112
3
4
32
68
2
1
2
2
2122
3
4
33
71
2
2
2
2
2222
3
4
34
80
0
0
0
3
0003
4
1
35
3
0
0
1
3
0013
4
2
36
7
0
0
2
3
0023
4
2
37
11
0
0
3
3
0033
4
2
38
15
0
1
0
3
0103
4
3
39
19
0
1
1
3
0113
4
3
40
23
因此,首先您需要按顺序排列所有数字为 0 的数字。即只有 00
然后所有数字为 0,1 的数字:00、01、10、11 但不包括 00
然后所有数字为 0、1、2 的数字:00、01、02、10、11、12、20、21、22 但不包括 00、01、10、11,即所有没有数字的数字数字 2.
通过遍历所有组合并排除已经打印的组合来实现是最简单的。
for(maxdigit=0; maxdigit<10; ++maxdigit) {
for(digit1 = 0; digit1 <= maxdigit; ++digit1) {
for(digit2 = 0; digit2 <= maxdigit; ++digit2) {
for(digit3 = 0; digit3 <= maxdigit; ++digit3) {
for(digit4 = 0; digit4 <= maxdigit; ++digit4) {
if( digit1 < maxdigit && digit2 < maxdigit
&& digit3 < maxdigit && digit4 < maxdigit) continue;
print( digit1, digit2, digit3, digit4);
}}}}
}
要了解其工作原理,您可以在网格中排列 2 位数版本
00 | 01 | 02 | 03 | 04
----- | | |
10 11 | 12 | 13 | 14
---------- | |
20 21 22 | 23 | 24
--------------- |
30 31 32 33 | 34
--------------------
40 41 42 43 44
注意每组数字如何形成 "shells"。在第一个 shell 我们只有一个数字,第一个和第二个 shell 有 4 = 2^2 个数字,第一个,第二个和第三个 shell 有 9 = 3^2 个数字等等
我们可以用它来计算每个 shell 中有多少个数字。在两位数的情况下是 1^2=1, 2^2-1^2=3, 3^2-2^2=5, 4^2-3^2=7.
用三位数代替它的立方体。 1^3=1, 2^3-1^3=9-1 = 8, 3^3-2^3=27-9 = 18, 等等
四位数字的四次方。
通过考虑 shells,我们可以找到一种更有效的做事方式。在 3 位数的情况下,我们有 shell 个立方体,需要计算出通过 shell 的路径。除非你有大量的数字,否则我不确定是否有很多收获。
要获得此顺序,请考虑 3 位数的情况,并令 x、y、z 依次为数字。如果我们正在查看第 k 个 shell,我们希望获得三个平面 x=k、y=k、z=k 上的所有解。这些解决方案分为 x
在伪代码中
for(shell=0;shell<=9;++shell) {
// Do the L shaped part
for(x=0;x<shell;++x) {
// The the y-leg, which has z=k
for(y=0;y<shell;++y)
print(x,y,shell);
// Do the z-leg, which has y=k
for(z=0;z<=shell;++z)
print(x,shell,z);
}
// Now the x=shell face
for(y=0;y<=shell;++y)
for(z=0;z<=shell;++z)
print(shell,y,z);
}
应该可以将其推广到 d 维。让我们这里的坐标为 x1, x2, ..., xd。第 k 个 shell 中的解将位于 (d-1) 维超平面 x1=k, x2=k, ..., xd=k 上。我们再次通过 x1=0 循环到 x1=k-1,x1=0 问题与 d-1 维问题相同,这表明采用递归方法。
// solve the dim-dimensional problem for
// prefix the output with prefix
function solve(int shell,int dim,String prefix) {
if(dim==1) {
// only one solution with the last digit being the shell
print(prefix+shell);
return;
}
// loop through the first digit
for(int x=0;x<shell;++x) {
String prefix2 = prefix + x;
solve(shell,dim-1,prefix2);
}
// Now to the x=k hypercube,
// need to do this in a separate recursion
String prefix2 = prefix + shell;
hypercube(shell,dim-1,prefix2);
}
// all solutions in dim dimensions with a given prefix
function hypercube(int shell,int dim,String prefix) {
if(dim==1) {
for(int x=0;x<=shell;++x)
println(prefix+x);
}
else {
for(int x=0;x<=shell;++x) {
String prefix2 = prefix + x;
hypercube(shell,dim-1,prefix2);
}
}
}
// Now call, here we do the 4 digit version
for(shell=0;shell<=9;++shell) {
solve(shell,4,"");
}
这里是 n 到 4 的所有 4 位 base(n) 数字的 table,省略了前一列中已经列出的所有数字。在这种排列中,一些模式是显而易见的,而且看起来您将不得不跳过以找到下一个未使用的最多的模式是 n-1(忽略零)。您还可以从 n-1 开始计算每个新碱基。给定基数 n 中的大多数数字都是可用的,包括从 (n-1),(n-2)(0)(0) 向上的所有数字。
这种安排表明,朴素的消除方法可能可以找到下一个或上一个数字,但是,再一次,你必须更多地从算法上看模式来回答像 'what does the one at (x) look like' 或'what ordinal position is (yyyy) at' 没有循环。
+-----+------+------+------+------+
| | - | 2 | 3 | 4 |
+-----+------+------+------+------+
| 0 | 0000 | | | |
| 1 | | 0001 | | |
| 2 | | 0010 | 0002 | |
| 3 | | 0011 | | 0003 |
| 4 | | 0100 | | |
| 5 | | 0101 | 0012 | |
| 6 | | 0110 | 0020 | |
| 7 | | 0111 | 0021 | 0013 |
| 8 | | 1000 | 0022 | |
| 9 | | 1001 | | |
| 10 | | 1010 | | |
| 11 | | 1011 | 0102 | 0023 |
| 12 | | 1100 | | 0030 |
| 13 | | 1101 | | 0031 |
| 14 | | 1110 | 0112 | 0032 |
| 15 | | 1111 | 0120 | 0033 |
| 16 | | | 0121 | |
| 17 | | | 0122 | |
| 18 | | | 0200 | |
| 19 | | | 0201 | 0103 |
| 20 | | | 0202 | |
| 21 | | | 0210 | |
| 22 | | | 0211 | |
| 23 | | | 0212 | 0113 |
| 24 | | | 0220 | |
| 25 | | | 0221 | |
| 26 | | | 0222 | |
| 27 | | | | 0123 |
| 28 | | | | 0130 |
| 29 | | | 1002 | 0131 |
| 30 | | | | 0132 |
| 31 | | | | 0133 |
| 32 | | | 1012 | |
| 33 | | | 1020 | |
| 34 | | | 1021 | |
| 35 | | | 1022 | 0203 |
| 36 | | | | |
| 37 | | | | |
| 38 | | | 1102 | |
| 39 | | | | 0213 |
| 40 | | | | |
| 41 | | | 1112 | |
| 42 | | | 1120 | |
| 43 | | | 1121 | 0223 |
| 44 | | | 1122 | 0230 |
| 45 | | | 1200 | 0231 |
| 46 | | | 1201 | 0232 |
| 47 | | | 1202 | 0233 |
| 48 | | | 1210 | 0300 |
| 49 | | | 1211 | 0301 |
| 50 | | | 1212 | 0302 |
| 51 | | | 1220 | 0303 |
| 52 | | | 1221 | 0310 |
| 53 | | | 1222 | 0311 |
| 54 | | | 2000 | 0312 |
| 55 | | | 2001 | 0313 |
| 56 | | | 2002 | 0320 |
| 57 | | | 2010 | 0321 |
| 58 | | | 2011 | 0322 |
| 59 | | | 2012 | 0323 |
| 60 | | | 2020 | 0330 |
| 61 | | | 2021 | 0331 |
| 62 | | | 2022 | 0332 |
| 63 | | | 2100 | 0333 |
| 64 | | | 2101 | |
| 65 | | | 2102 | |
| 66 | | | 2110 | |
| 67 | | | 2111 | 1003 |
| 68 | | | 2112 | |
| 69 | | | 2120 | |
| 70 | | | 2121 | |
| 71 | | | 2122 | 1013 |
| 72 | | | 2200 | |
| 73 | | | 2201 | |
| 74 | | | 2202 | |
| 75 | | | 2210 | 1023 |
| 76 | | | 2211 | 1030 |
| 77 | | | 2212 | 1031 |
| 78 | | | 2220 | 1032 |
| 79 | | | 2221 | 1033 |
| 80 | | | 2222 | |
| 81 | | | | |
| 82 | | | | |
| 83 | | | | 1103 |
| 84 | | | | |
| 85 | | | | |
| 86 | | | | |
| 87 | | | | 1113 |
| 88 | | | | |
| 89 | | | | |
| 90 | | | | |
| 91 | | | | 1123 |
| 92 | | | | 1130 |
| 93 | | | | 1131 |
| 94 | | | | 1132 |
| 95 | | | | 1133 |
| 96 | | | | |
| 97 | | | | |
| 98 | | | | |
| 99 | | | | 1203 |
| 100 | | | | |
| 101 | | | | |
| 102 | | | | |
| 103 | | | | 1213 |
| 104 | | | | |
| 105 | | | | |
| 106 | | | | |
| 107 | | | | 1223 |
| 108 | | | | 1230 |
| 109 | | | | 1231 |
| 110 | | | | 1232 |
| 111 | | | | 1233 |
| 112 | | | | 1300 |
| 113 | | | | 1301 |
| 114 | | | | 1302 |
| 115 | | | | 1303 |
| 116 | | | | 1310 |
| 117 | | | | 1311 |
| 118 | | | | 1312 |
| 119 | | | | 1313 |
| 120 | | | | 1320 |
| 121 | | | | 1321 |
| 122 | | | | 1322 |
| 123 | | | | 1323 |
| 124 | | | | 1330 |
| 125 | | | | 1331 |
| 126 | | | | 1332 |
| 127 | | | | 1333 |
| 128 | | | | |
| 129 | | | | |
| 130 | | | | |
| 131 | | | | 2003 |
| 132 | | | | |
| 133 | | | | |
| 134 | | | | |
| 135 | | | | 2013 |
| 136 | | | | |
| 137 | | | | |
| 138 | | | | |
| 139 | | | | 2023 |
| 140 | | | | 2030 |
| 141 | | | | 2031 |
| 142 | | | | 2032 |
| 143 | | | | 2033 |
| 144 | | | | |
| 145 | | | | |
| 146 | | | | |
| 147 | | | | 2103 |
| 148 | | | | |
| 149 | | | | |
| 150 | | | | |
| 151 | | | | 2113 |
| 152 | | | | |
| 153 | | | | |
| 154 | | | | |
| 155 | | | | 2123 |
| 156 | | | | 2130 |
| 157 | | | | 2131 |
| 158 | | | | 2132 |
| 159 | | | | 2133 |
| 160 | | | | |
| 161 | | | | |
| 162 | | | | |
| 163 | | | | 2203 |
| 164 | | | | |
| 165 | | | | |
| 166 | | | | |
| 167 | | | | 2213 |
| 168 | | | | |
| 169 | | | | |
| 170 | | | | |
| 171 | | | | 2223 |
| 172 | | | | 2230 |
| 173 | | | | 2231 |
| 174 | | | | 2232 |
| 175 | | | | 2233 |
| 176 | | | | 2300 |
| 177 | | | | 2301 |
| 178 | | | | 2302 |
| 179 | | | | 2303 |
| 180 | | | | 2310 |
| 181 | | | | 2311 |
| 182 | | | | 2312 |
| 183 | | | | 2313 |
| 184 | | | | 2320 |
| 185 | | | | 2321 |
| 186 | | | | 2322 |
| 187 | | | | 2323 |
| 188 | | | | 2330 |
| 189 | | | | 2331 |
| 190 | | | | 2332 |
| 191 | | | | 2333 |
| 192 | | | | 3000 |
| 193 | | | | 3001 |
| 194 | | | | 3002 |
| 195 | | | | 3003 |
| 196 | | | | 3010 |
| 197 | | | | 3011 |
| 198 | | | | 3012 |
| 199 | | | | 3013 |
| 200 | | | | 3020 |
| 201 | | | | 3021 |
| 202 | | | | 3022 |
| 203 | | | | 3023 |
| 204 | | | | 3030 |
| 205 | | | | 3031 |
| 206 | | | | 3032 |
| 207 | | | | 3033 |
| 208 | | | | 3100 |
| 209 | | | | 3101 |
| 210 | | | | 3102 |
| 211 | | | | 3103 |
| 212 | | | | 3110 |
| 213 | | | | 3111 |
| 214 | | | | 3112 |
| 215 | | | | 3113 |
| 216 | | | | 3120 |
| 217 | | | | 3121 |
| 218 | | | | 3122 |
| 219 | | | | 3123 |
| 220 | | | | 3130 |
| 221 | | | | 3131 |
| 222 | | | | 3132 |
| 223 | | | | 3133 |
| 224 | | | | 3200 |
| 225 | | | | 3201 |
| 226 | | | | 3202 |
| 227 | | | | 3203 |
| 228 | | | | 3210 |
| 229 | | | | 3211 |
| 230 | | | | 3212 |
| 231 | | | | 3213 |
| 232 | | | | 3220 |
| 233 | | | | 3221 |
| 234 | | | | 3222 |
| 235 | | | | 3223 |
| 236 | | | | 3230 |
| 237 | | | | 3231 |
| 238 | | | | 3232 |
| 239 | | | | 3233 |
| 240 | | | | 3300 |
| 241 | | | | 3301 |
| 242 | | | | 3302 |
| 243 | | | | 3303 |
| 244 | | | | 3310 |
| 245 | | | | 3311 |
| 246 | | | | 3312 |
| 247 | | | | 3313 |
| 248 | | | | 3320 |
| 249 | | | | 3321 |
| 250 | | | | 3322 |
| 251 | | | | 3323 |
| 252 | | | | 3330 |
| 253 | | | | 3331 |
| 254 | | | | 3332 |
| 255 | | | | 3333 |
+-----+------+------+------+------+
编辑:当你走得更宽时,图案会更清晰。这是以 11 为底数的所有 2 位数(因为......为什么不呢?)
+-----+----+----+----+----+----+----+----+----+----+----+----+
| | - | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
+-----+----+----+----+----+----+----+----+----+----+----+----+
| 0 | 00 | | | | | | | | | | |
| 1 | | 01 | | | | | | | | | |
| 2 | | 10 | 02 | | | | | | | | |
| 3 | | 11 | | 03 | | | | | | | |
| 4 | | | | | 04 | | | | | | |
| 5 | | | 12 | | | 05 | | | | | |
| 6 | | | 20 | | | | 06 | | | | |
| 7 | | | 21 | 13 | | | | 07 | | | |
| 8 | | | 22 | | | | | | 08 | | |
| 9 | | | | | 14 | | | | | 09 | |
| 10 | | | | | | | | | | | 0A |
| 11 | | | | 23 | | 15 | | | | | |
| 12 | | | | 30 | | | | | | | |
| 13 | | | | 31 | | | 16 | | | | |
| 14 | | | | 32 | 24 | | | | | | |
| 15 | | | | 33 | | | | 17 | | | |
| 16 | | | | | | | | | | | |
| 17 | | | | | | 25 | | | 18 | | |
| 18 | | | | | | | | | | | |
| 19 | | | | | 34 | | | | | 19 | |
| 20 | | | | | 40 | | 26 | | | | |
| 21 | | | | | 41 | | | | | | 1A |
| 22 | | | | | 42 | | | | | | |
| 23 | | | | | 43 | 35 | | 27 | | | |
| 24 | | | | | 44 | | | | | | |
| 25 | | | | | | | | | | | |
| 26 | | | | | | | | | 28 | | |
| 27 | | | | | | | 36 | | | | |
| 28 | | | | | | | | | | | |
| 29 | | | | | | 45 | | | | 29 | |
| 30 | | | | | | 50 | | | | | |
| 31 | | | | | | 51 | | 37 | | | |
| 32 | | | | | | 52 | | | | | 2A |
| 33 | | | | | | 53 | | | | | |
| 34 | | | | | | 54 | 46 | | | | |
| 35 | | | | | | 55 | | | 38 | | |
| 36 | | | | | | | | | | | |
| 37 | | | | | | | | | | | |
| 38 | | | | | | | | | | | |
| 39 | | | | | | | | 47 | | 39 | |
| 40 | | | | | | | | | | | |
| 41 | | | | | | | 56 | | | | |
| 42 | | | | | | | 60 | | | | |
| 43 | | | | | | | 61 | | | | 3A |
| 44 | | | | | | | 62 | | 48 | | |
| 45 | | | | | | | 63 | | | | |
| 46 | | | | | | | 64 | | | | |
| 47 | | | | | | | 65 | 57 | | | |
| 48 | | | | | | | 66 | | | | |
| 49 | | | | | | | | | | 49 | |
| 50 | | | | | | | | | | | |
| 51 | | | | | | | | | | | |
| 52 | | | | | | | | | | | |
| 53 | | | | | | | | | 58 | | |
| 54 | | | | | | | | | | | 4A |
| 55 | | | | | | | | 67 | | | |
| 56 | | | | | | | | 70 | | | |
| 57 | | | | | | | | 71 | | | |
| 58 | | | | | | | | 72 | | | |
| 59 | | | | | | | | 73 | | 59 | |
| 60 | | | | | | | | 74 | | | |
| 61 | | | | | | | | 75 | | | |
| 62 | | | | | | | | 76 | 68 | | |
| 63 | | | | | | | | 77 | | | |
| 64 | | | | | | | | | | | |
| 65 | | | | | | | | | | | 5A |
| 66 | | | | | | | | | | | |
| 67 | | | | | | | | | | | |
| 68 | | | | | | | | | | | |
| 69 | | | | | | | | | | 69 | |
| 70 | | | | | | | | | | | |
| 71 | | | | | | | | | 78 | | |
| 72 | | | | | | | | | 80 | | |
| 73 | | | | | | | | | 81 | | |
| 74 | | | | | | | | | 82 | | |
| 75 | | | | | | | | | 83 | | |
| 76 | | | | | | | | | 84 | | 6A |
| 77 | | | | | | | | | 85 | | |
| 78 | | | | | | | | | 86 | | |
| 79 | | | | | | | | | 87 | 79 | |
| 80 | | | | | | | | | 88 | | |
| 81 | | | | | | | | | | | |
| 82 | | | | | | | | | | | |
| 83 | | | | | | | | | | | |
| 84 | | | | | | | | | | | |
| 85 | | | | | | | | | | | |
| 86 | | | | | | | | | | | |
| 87 | | | | | | | | | | | 7A |
| 88 | | | | | | | | | | | |
| 89 | | | | | | | | | | 89 | |
| 90 | | | | | | | | | | 90 | |
| 91 | | | | | | | | | | 91 | |
| 92 | | | | | | | | | | 92 | |
| 93 | | | | | | | | | | 93 | |
| 94 | | | | | | | | | | 94 | |
| 95 | | | | | | | | | | 95 | |
| 96 | | | | | | | | | | 96 | |
| 97 | | | | | | | | | | 97 | |
| 98 | | | | | | | | | | 98 | 8A |
| 99 | | | | | | | | | | 99 | |
| 100 | | | | | | | | | | | |
| 101 | | | | | | | | | | | |
| 102 | | | | | | | | | | | |
| 103 | | | | | | | | | | | |
| 104 | | | | | | | | | | | |
| 105 | | | | | | | | | | | |
| 106 | | | | | | | | | | | |
| 107 | | | | | | | | | | | |
| 108 | | | | | | | | | | | |
| 109 | | | | | | | | | | | 9A |
| 110 | | | | | | | | | | | A0 |
| 111 | | | | | | | | | | | A1 |
| 112 | | | | | | | | | | | A2 |
| 113 | | | | | | | | | | | A3 |
| 114 | | | | | | | | | | | A4 |
| 115 | | | | | | | | | | | A5 |
| 116 | | | | | | | | | | | A6 |
| 117 | | | | | | | | | | | A7 |
| 118 | | | | | | | | | | | A8 |
| 119 | | | | | | | | | | | A9 |
| 120 | | | | | | | | | | | AA |
+-----+----+----+----+----+----+----+----+----+----+----+----+