質問編集履歴
3
ppaulさんのご指摘の記述を反映
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
並列処理の偏りを防
|
1
|
+
並列処理の偏りを防ぎつつ、任意の数でハッシュをバケット分割できるキー名を求める方法
|
test
CHANGED
@@ -78,7 +78,7 @@
|
|
78
78
|
|
79
79
|
おそらく次のようなステップで行うのだろうと想像できたのですが、不勉強で記述方法が分かりませんでした。
|
80
80
|
|
81
|
-
もし、
|
81
|
+
もし、別の最適解を求められるスマートな手法があるとしたら、よりよい形での処理方法を学びたいです。
|
82
82
|
|
83
83
|
|
84
84
|
|
@@ -108,6 +108,12 @@
|
|
108
108
|
|
109
109
|
|
110
110
|
|
111
|
+
しかし、 `[3, 3, 2, 2, 2]` に対して同じ手法で2分割すると、`3 + 2 + 2 = 7` と `3 + 2 = 5` となります。
|
112
|
+
|
113
|
+
最適解である `3 + 3 = 6` と `2 + 2 + 2 = 6` とは異なる事にppaulさんのご指摘で気づきました。
|
114
|
+
|
115
|
+
|
116
|
+
|
111
117
|
## 試してみたこと
|
112
118
|
|
113
119
|
|
@@ -118,4 +124,4 @@
|
|
118
124
|
|
119
125
|
|
120
126
|
|
121
|
-
また、teratailやGoogleで 均等 配分 分割などのキーワードで探しましたが、見
|
127
|
+
また、teratailやGoogleで 均等 配分 分割などのキーワードで探しましたが、見つけられませんでした。
|
2
誤字の修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -14,7 +14,7 @@
|
|
14
14
|
|
15
15
|
|
16
16
|
|
17
|
-
configの中に、aaa, bbb, cccという添え字があり、aaaの中には4つ、bbbには1つ、cccには3つあります。
|
17
|
+
configの中に、aaa, bbb, cccという添え字があり、aaaの中には4つ、bbbには1つ、cccには3つ要素があります。
|
18
18
|
|
19
19
|
`concurrency_limit=2`ということで、単純に2つに分割すると `[['aaa','bbb'],['ccc']]`となります。
|
20
20
|
|
@@ -30,7 +30,7 @@
|
|
30
30
|
|
31
31
|
```python
|
32
32
|
|
33
|
-
# パラメータ
|
33
|
+
# 入力パラメータ (この結果を用いて並列上限数として作用させるため、この名称です)
|
34
34
|
|
35
35
|
concurrency_limit = 2
|
36
36
|
|
@@ -64,7 +64,7 @@
|
|
64
64
|
|
65
65
|
|
66
66
|
|
67
|
-
# 出力データ例 (できるならば要素の多い順に並んで欲しいが、[['aaa'], ['bbb','ccc']]という順番でも可)
|
67
|
+
# 出力データ例 (できるならば要素の多い順に並んで欲しいが、[['aaa'], ['bbb','ccc']]という順番でも可です)
|
68
68
|
|
69
69
|
[['aaa'], ['ccc','bbb']]
|
70
70
|
|
@@ -84,9 +84,9 @@
|
|
84
84
|
|
85
85
|
1. 要素数を計算済のデータ構造を作り大きい順にソートする `'aaa':4, 'ccc':3, 'bbb':1`
|
86
86
|
|
87
|
-
2. `concurrency_limit: N`の
|
87
|
+
2. `concurrency_limit: N`のループで、新たに作ったハッシュ配列に先頭N件を格納する `[{'item':['aaa'],'sum':4},{'item':['ccc'],'sum':3}]`
|
88
88
|
|
89
|
-
3.
|
89
|
+
3. 2周目のループでcountが少ない順に残った要素を追記する `[{'item':['aaa'],'sum':4},{'item':['ccc','bbb'],'sum':4}]`
|
90
90
|
|
91
91
|
4. itemの中身を出力する `[['aaa'], ['ccc','bbb']]`
|
92
92
|
|
@@ -96,11 +96,11 @@
|
|
96
96
|
|
97
97
|
|
98
98
|
|
99
|
-
1. 1ループ目 [10], [7]
|
99
|
+
1. 1ループ目 `[10]`, `[7]`
|
100
100
|
|
101
|
-
2. 2ループ目 [10,4], [7,5]
|
101
|
+
2. 2ループ目 `[10,4]`, `[7,5]`
|
102
102
|
|
103
|
-
3.
|
103
|
+
3. 3ループ目 `[10,4,2]`, `[7,5,3]`
|
104
104
|
|
105
105
|
|
106
106
|
|
1
より丁寧な説明に
test
CHANGED
File without changes
|
test
CHANGED
@@ -16,11 +16,13 @@
|
|
16
16
|
|
17
17
|
configの中に、aaa, bbb, cccという添え字があり、aaaの中には4つ、bbbには1つ、cccには3つあります。
|
18
18
|
|
19
|
-
`concurrency_limit=2`ということで、単純に2つに分割すると `[['aaa','bbb'],['ccc']]`
|
19
|
+
`concurrency_limit=2`ということで、単純に2つに分割すると `[['aaa','bbb'],['ccc']]`となります。
|
20
|
+
|
21
|
+
これではaaaとbbbの要素数は4+1=5、もう一方のcccの要素数は3となり、偏ってしまいます。
|
20
22
|
|
21
23
|
|
22
24
|
|
23
|
-
そうではなく、中の要素数を考慮した分割を行い、
|
25
|
+
そうではなく、中の要素数を考慮した分割を行い、要素数の多い順に`[['aaa'], ['ccc','bbb']]`という結果を得られる方法が知りたく、お力添え頂けますでしょうか。
|
24
26
|
|
25
27
|
外部ライブラリを用いる方法も含めて探しております。
|
26
28
|
|
@@ -62,13 +64,7 @@
|
|
62
64
|
|
63
65
|
|
64
66
|
|
65
|
-
# 出力データ例 (合計値が共に4つとなっている)
|
66
|
-
|
67
|
-
[['aaa'], ['bbb','ccc']]
|
67
|
+
# 出力データ例 (できるならば要素の多い順に並んで欲しいが、[['aaa'], ['bbb','ccc']]という順番でも可)
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
# 出力データ例 (できるならば要素の多い順に並んで欲しい)
|
72
68
|
|
73
69
|
[['aaa'], ['ccc','bbb']]
|
74
70
|
|
@@ -82,7 +78,7 @@
|
|
82
78
|
|
83
79
|
おそらく次のようなステップで行うのだろうと想像できたのですが、不勉強で記述方法が分かりませんでした。
|
84
80
|
|
85
|
-
|
81
|
+
もし、これよりもっとスマートな手法があるとしたら、よりよい形での処理方法を学びたいです。
|
86
82
|
|
87
83
|
|
88
84
|
|