0

リソースが限られている C ベースのカスタム言語を使用しています (C のようなものもあれば、他の言語に基づいて追加されたものもあります)。非動的な配列と行列だけがあり、辞書、スタック、キューとヒープ、if、for、while cicle もあります。

私の問題は、キー: 'a' (int) と値: 'b'(int) を持つ辞書を持ち、これらの非動的構造を使用して、辞書を簡単な方法で反転するにはどうすればよいですか?次のような新しい辞書: キー: 'b'(int)、値: 'a'(int[ ])

4

2 に答える 2

1

非動的メモリを最大の問題とし、処理時間や中間アーティファクトのサイズを気にしない場合は、次のようになります。

1) 元の辞書を別の順序でタプルのリストに注ぎます。次に並べ替えます。

{'a': 1, 'b': 1, 'c': 2}

生産する

[[1, 'a'], [1, 'b'], [3, 'c']]

2) このリストをウォークスルーし、一意の最初の値を反復処理して、マップされた値 (つまり、元のキー) のリストを作成します。

... 生産する

{'1': ['a', 'b'], '2':['c']}

3) 中間リストを破棄し、そのメモリを再利用します。

物事のサイズと必要な速度に応じて、中間リストを調べてすべてのメモリ要件を把握し、各要素に適切なサイズのリストを事前に割り当てるステップ (1.5) を追加することもできます。繰り返しになりますが、これは動的メモリの不足を最も懸念しており、最初から「適切なサイズ」の最終結果を見つけようとしています。

于 2013-05-23T17:34:07.117 に答える
0

できません。または、少なくともすべきではありません。なんで?同じ値を持つ 2 つのキーがあるとします...

それ以外の場合は、擬似コードで:

create dictionary BAR
for each key in dictionary FOO
    BAR[FOO[key]] = key
于 2013-05-23T17:14:10.463 に答える