私はこの巨大な2次元のデータ配列を持っています。行順に保存されます。
A(1,1)A(1,2)A(1,3)..... A(n-2、n)A(n-1、n)A(n、n)
列順に並べ替えたい
A(1,1)A(2,1)A(3,1)..... A(n、n-2)A(n、n-1)A(n、n)
データセットはかなり大きく、コンピュータのRAMに収まる以上のものです。(nは約10,000ですが、各データ項目には約1Kのスペースが必要です。)
誰かがこれを行うための巧妙なまたは効率的なアルゴリズムを知っていますか?
私はこの巨大な2次元のデータ配列を持っています。行順に保存されます。
A(1,1)A(1,2)A(1,3)..... A(n-2、n)A(n-1、n)A(n、n)
列順に並べ替えたい
A(1,1)A(2,1)A(3,1)..... A(n、n-2)A(n、n-1)A(n、n)
データセットはかなり大きく、コンピュータのRAMに収まる以上のものです。(nは約10,000ですが、各データ項目には約1Kのスペースが必要です。)
誰かがこれを行うための巧妙なまたは効率的なアルゴリズムを知っていますか?
アプリ全体がクラスのインスタンスを介してマトリックスにアクセスできるように、Matrixクラスが必要です。次に、転置は、要素にアクセスするときにインデックスを逆にするフラグを設定するだけです。インスタント転置!
空のファイルを作成します(可能な場合は、要素n用に十分なスペースを確保してください)。n元のマトリックスを繰り返し処理します。(i,j)ファイルに要素を追加しますj。それが終わったら、今書いたファイルを追加します。
単純な方法は、ファイルを10000回読み取り、各行に対応する列を見つけることです。これは簡単に実装できるはずですが、プログラムの実行にどれくらいの時間がかかるかわかりません。
コメントの中で、別のファイルを出力することについて言及しました。このファイルは、で並べ替える必要がありますsort。このような大きなファイルを並べ替えるには永遠に時間がかかるため、これは悪い考えです。並べ替えは複雑な(または少なくともリソースを大量に消費する)問題であるため、転置を並べ替えに一般化することはおそらく間違った方法です。