You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在JS中高效存储数独的最优方案探讨(含1万组存储需求)

更优的数独存储方案推荐

你要存20000组81位的数独数据(1万谜题+1万解答),以下几种方案比你现有的字符串、数组存储更紧凑:

1. 位压缩二进制存储(最省空间)

数独里每个数字是0-9,用4位二进制就足够存(2^4=16,完全覆盖0-9的范围)。81个数字加起来就是 81×4=324位,换算成字节是40.5字节,实际存的时候用41字节就行(或者拆成5个64位整数+1个字节,刚好凑够324位)。

  • 总存储量:20000×41=820KB,比你说的数组方案(1.4MB)少42%左右,比UTF-16字符串方案(3.2MB)直接省了74%。
  • 实现思路:
    • 把每个数字转成4位二进制(比如0→0000,9→1001)
    • 按顺序把这些4位数据拼成连续的二进制流
    • 每8位(1字节)存成一个单元,最后不足8位的补0(解析时忽略补位即可)
  • 优缺点:存储密度最高,但需要自己实现序列化/反序列化逻辑,适合对存储空间要求极高的场景。

2. Base64编码的压缩文本存储(兼顾省空间和易用性)

要是不想用纯二进制,先按上面的方法做位压缩得到324位二进制数据,再转成Base64编码:

  • 324位二进制能分成54个6位的单元(324÷6=54),每个单元对应一个Base64字符

  • 每个Base64字符用UTF-8存储占1字节,所以每组数独只需要54字节

  • 总存储量:20000×54=1.08MB,比UTF-8字符串方案(1.62MB)少33%左右

  • 实现思路:

    • 先完成位压缩得到二进制流
    • 用Base64编码工具将二进制转成字符串
    • 存储时每行存一个数独的Base64字符串即可
  • 优缺点:文本格式方便存储和传输,解析时只需Base64解码再拆位,复杂度低,空间占用远小于原始字符串方案。

3. 差分存储(针对谜题+解答的配对场景)

你同时存储谜题和对应的解答,谜题里有大量0(空格),解答是填满的完整数独,可利用两者的差异压缩存储:

  • 用一个81位的掩码(11字节)标记谜题中非0数字的位置,再存储谜题的非0数字,最后存储解答中对应谜题空格位置的数字

  • 总数据量远小于单独存储两组完整数独,每组配对大概占用51.5字节,总存储量约1.03MB

  • 优缺点:能进一步压缩配对数据的体积,但解析时需要处理位置映射,逻辑稍复杂,适合需要关联谜题和解答的场景。

小技巧:优化现有方案

要是不想换全新的方案,也能给现有方案做简单优化:

  • 字符串方案弃用UTF-16,改用UTF-8编码,每个字符占1字节,每组81字节,总存储量20000×81=1.62MB,直接比UTF-16省一半空间。
  • 数组方案没必要用64位数字存每行,一行9个数字仅需36位即可存储,用64位属于空间浪费,不如直接采用整体位压缩更高效。

内容的提问来源于stack exchange,提问作者Mirror318

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 16:55:38