1

0 から 3 までの非常に長い一連の数字があります。使用するディスク容量を最小限に抑えるにはどうすればよいか考えています。と考えていたら、0から3までの数字も2進数2桁になりうることに気がついたので、2進数で保存しておいたほうがいいかもしれません。

また、アプリをそれを読み取る単一のアプリにするためにカスタムファイルタイプに保存したいと思いますが、必須ではありません(ただし、感謝します)。

私はこの質問も見つけました。これは役立つかもしれませんが、それを行う方法が見つかりませんでした:

しかし、iOS でカスタム ファイルタイプを作成する方法に関する質問やブログなどは見つかりません。それをアプリに関連付ける方法に関する質問だけです。

さらに情報が必要な場合は、私に聞いてください。

前もって感謝します!!!

編集:

チェーンは約数百になります。1000 未満になると思います。実際、私が達成しようとしているのは、発明された DNA データを保存することであり、DNA 塩基は A、G、C、T であり、 0、1、2、3 に変換されます。しかし、それをテキストファイルとして保存すると、はるかに大きくなります。私がそれで行う唯一のことは、補塩基 (G > C、C > G、A > T、T > A) を計算することです。

ご清聴ありがとうございました。

4

2 に答える 2

3

あなたのプロフィールを見るとあなたは 15 歳なので、楽しみと学習のためにこれをやっているのだと思います。これを専門的に行う場合は、標準のcsv 形式を使用することをお勧めします。標準の csv 形式が最も迅速かつ簡単に実装できるからです。1,000 未満の値を扱っているため、ファイルが 2 KB を超えることはありません。あなたのアプリファイルはおそらく何千倍も大きいでしょう。

ファイル形式の例:

0,1,2,3,2,1,3,0

あるいは

A,G,C,T,C,G,T,A

これを単に楽しみや学習のために行っていて、1 時間あたり 100 ドルも請求しない場合は、2 ビット値のバイナリ形式を使用します。それは少し挑戦的で、おそらく楽しいことです。ただし、余分な時間は、有料の顧客にとっては決して価値のあるものではありません. アプリのパフォーマンスとメモリ使用量への影響は非常に小さく、1 時間余分に費やすと、顧客には 100 ドルの追加費用がかかります。

もちろん、数十億の値を扱っている場合、この最適化は理にかなっていますが、数百の値では余分な努力をする価値はありません。

于 2012-06-19T21:33:32.503 に答える
0

これにより、4つの2ビット値を1つの文字にパックする方法がわかります。これよりもCSVデータを読みたいのですが、パックの仕方に注意してください。

または、手元にある圧縮ライブラリ(ZLibなど)を使用して、圧縮ストリームを出力します。または、ここで作成したこのビットストリームを圧縮して、フットプリントをさらに小さくします。

 // Given sourceArray as an array of ASCII chars containing '0' through '3'
unsigned char accumulator = 0;

for(i=0; i<numBytesInSourceArray; i++)
{
    int value = sourceArray[i] - '0';
    assert(value >= 0 && value <= 3);

    int shift = (i & 0x03) * 2;
    accumulator |= (value  - '0') << shift;

    if(shift == 6)    
    {
        outputByte(accumulator);
        accumulator = 0;
    }
}

if(numBytesInSource & 0x03)
{
    outputByte(accumulator);
}
于 2012-06-19T22:03:45.577 に答える