質問編集履歴

3

ppaulさんのご指摘の記述を反映

2021/09/28 23:25

投稿

y-ken
y-ken

スコア1

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

誤字の修正

2021/09/28 23:25

投稿

y-ken
y-ken

スコア1

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`の数の配列に先頭N件を格納する `[{'item':['aaa'],'sum':4},{'item':['ccc'],'sum':3}]`
87
+ 2. `concurrency_limit: N`のループで、新たに作ったハッシュ配列に先頭N件を格納する `[{'item':['aaa'],'sum':4},{'item':['ccc'],'sum':3}]`
88
88
 
89
- 3. のループでcountが少ない順に残った要素を追記する `[{'item':['aaa'],'sum':4},{'item':['ccc','bbb'],'sum':4}]`
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. 1ループ目 [10,4,2], [7,5,3]
103
+ 3. 3ループ目 `[10,4,2]`, `[7,5,3]`
104
104
 
105
105
 
106
106
 

1

より丁寧な説明に

2021/09/28 16:07

投稿

y-ken
y-ken

スコア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
- そうではなく、中の要素数を考慮した分割を行い、`[['aaa'], ['bbb','ccc']]`または要素数の多い順に`[['aaa'], ['ccc','bbb']]`という結果を得られる方法が知りたく、お力添え頂けますでしょうか。
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