質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

Q&A

解決済

2回答

4124閲覧

PHPを用いて合計値が極力等しくなるように2分割(個数も均等)

bb_tech

総合スコア11

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

0グッド

0クリップ

投稿2015/12/05 14:48

1から1000の範囲でランダムに数字が50個並んでいるとします。
この数字を25個ずつに2グループ作成する場合、2つのグループのグループ間合計値が極力等しくなるようにするためにはどのようなコードを書けばよいでしょうか?

単純な問題ですが、複雑なアルゴリズムが必要な気がします・・・
その場合、2つのグループの合計値がある程度近づくコードでも可です。

以上、ご指導いただければ幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ikuwow

2015/12/05 15:26

こちらの質問が他のユーザから「質問の範囲が広すぎる」という評価を受けています わからない点を明確にし、調査したこと・試したことと共に記入していただくと、回答が得られやすくなります。
guest

回答2

0

ベストアンサー

コードはあえて記載しません、少し勉強すれば作れるはずなので想像してみてください。

仕分ける対象が10個かつ大小のりんごの重量だったらで考えていきましょう。
まずは10個のりんごの重量を量ります。
次に10個のりんごの平均重量を出します。

ここまでは誰が考えても一瞬でたどり着けるでしょう。
ここからがエンジニアとしての腕の見せどころです。

一番確実なパターンは、無造作に10個の中から5個を取り出す事を全パターンで行い、
平均重量と完全に一致すればそこで計算終了です、
一致しなければ全パターン行った結果、最も平均重量に近いパターンを覚えておき提出すれば良いのです。

「組み合わせパターン PHP」等でググればおk


今回はたかが50個中25個なんで全パターンゴリ押しでも大した時間がかかりませんが、
見ないでも良い分は見ないことにしましょう。
分かりやすいように10個からの調査を継続します。

まずはりんご10個重量が小さい順に並べ替えます(PHP ソート等でぐぐってください)

◆:選択 ◇:選択しない

←小 大→
◆◆◆◆◆◇◇◇◇◇
◆◆◆◆◇◆◇◇◇◇
◆◆◆◆◇◇◆◇◇◇
◆◆◆◆◇◇◇◆◇◇
◆◆◆◆◇◇◇◇◆◇
◆◆◆◆◇◇◇◇◇◆
◆◆◆◇◆◇◇◇◇◆
◆◆◆◇◇◆◇◇◇◆
~~~~中略~~~~
◆◇◇◇◇◇◆◆◆◆

これらの選択の仕方ならば下のパターンの方が合計重量が重い事が保証される…
つまりソート済みであることが保証されます。
ならば二分探索で高速に評価出来るので利用しましょう。
10個の内、最も左のものを選択したパターンは21通りですので、最高5回程度の評価で最もプラマイ0に近い値が得られます。

次のパターン(17通り)
◇◆◆◆◆◆◇◇◇◇
◇◆◆◆◆◇◆◇◇◇
◇◆◆◆◆◇◇◆◇◇
~~~~中略~~~~
◇◆◇◇◇◇◆◆◆◆

先ほどのような調子で評価していきましょう。

後はこれの繰り返しなんで、50個中25個を調べるアルゴリズムも同じ組み方すれば
100回程度の評価で回答が出るんじゃないですかね?
5000個中2500個あたりになってくると総当りが不可能になってくるので、この手法を使う事をオススメします。

投稿2015/12/05 16:55

miyabi-sun

総合スコア21158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

①ランダムな数値50個
②ソートされた数値50個
③大きい値から順に、逆側の配列の合計値よりも小さいなら追加していく。

こんな方法を考えてみたけど何かがおかしい気がする。はてさて

average

投稿2015/12/05 17:37

nage

総合スコア144

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問