[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 04/25 21:11 / Filesize : 316 KB / Number-of Response : 926
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

★★ Java の宿題ここで答えます Part 68 ★★



1 名前:デフォルトの名無しさん mailto:sage [2009/07/19(日) 23:15:02 ]
【質問者へ】
回答者の便宜のため、以下の注意事項を遵守してください。
・質問は【課題提示用テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・数学問題は「○×法でせよ」だけでなく、その数式、前提条件も説明してください。
・JavaScriptは板違い、Web制作板をご利用ください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
・回答されたら動作報告を必ずしてください。
・課題文が長い時、添付ファイルがある時はこちらのアップローダーを使うと便利です。
ttp://rg550.hp.infoseek.co.jp/cgi-bin/joyful/main.htm

【課題提示用テンプレ】
【 課題 】与えられた課題文をそのまま書きます。 《必須》
【 形態 】1. Javaアプリケーション(main()で開始)/2. Applet/3. Servlet/
       4. 携帯(開発環境のver.必須)/5. その他(明記のこと) 《必ず選択》
【 GUI  】1. AWTのみ/2. Swing/3. SWT/4. 制限なし/ 5. その他(明記すること)
       《GUIの課題の場合必ず選択》
【 期限 】提出期限、解答希望日を書きます。「できるだけ早く」はNG。 《必須》
【 Ver  】コンソールでjava -versionを実行し、その結果を貼ります。 《必須》
【 用語 】数学用語、専門用語の意味、説明を書きます。 《あれば必須》
【 補足 】課題について自分なりに補足する事、何か思う事があれば書きます。
       丸投げでない場合は、途中までのソースとその経過報告、
       質問点、疑問点を書きます(なるべく丸投げにしてください)。

【回答プログラムの掲載場所】
Java質問スレWiki  ttp://www.wikiroom.com/java/
ソースポストネット  ttp://sourcepost.sytes.net/
ろだ2  ttp://rg550.hp.infoseek.co.jp/cgi-bin/joyful/main.htm

【前スレ】
pc12.2ch.net/test/read.cgi/tech/1232627790/

159 名前:デフォルトの名無しさん mailto:sage [2009/09/01(火) 16:21:15 ]
>>157
参考リンクの逆反復法のソースを見たけど変なプログラムだな。
命名規則は置いておいても再描画のたびに数値計算を最初から繰り返すとか。
改造の大まかな方針としては、
paintの中のコードをそのままmainのコードとして置き換えて、
Drawで始まるメソッドやg.drawStringは数値計算ではなく出力するだけの部分なので、
drawStringについてはSystem.out.printlnでdrawStringの第一引数を与えるものに置き換える。
本来フレームのタイトルになるsetTitleについてもそのまま標準出力に出せばいい。
Drawで始まるメソッドについては与えられた行列やベクトルを表示するためのものなので、
例えばDrawMatVect(g, "*","=", 240, A, B, C, 4,4);なら、
A, B, Cという行列やベクトルの値をループを回して各要素ごとに標準出力に出力するようにする。
行列の要素を行単位で出力するコードくらいは書けるでしょ?

160 名前:デフォルトの名無しさん mailto:sage [2009/09/01(火) 16:29:36 ]
>>159
ありがとうございます。
自身はないですが、やってみます。

他にも回答を下さる方がいましたら、どうぞよろしくお願いします。

161 名前:デフォルトの名無しさん mailto:sage [2009/09/01(火) 16:30:06 ]
忘れてた。
paintの中身をmainに持ってくる場合、
MultMV等のインスタンスメソッドはクラスメソッドにしておかないと呼べなくなる。
メソッドにstaticを付けるのさえ面倒なら、
mainの中身をnew InvPower().calculate();とでもして、
InvPowerのコンストラクタを消して、
paint(Graphics g)をcalculate()と名前を変えてもいい。
extends Frameも要らない。

162 名前:デフォルトの名無しさん mailto:sage [2009/09/01(火) 17:09:57 ]
>>158
ttp://rg550.hp.infoseek.co.jp/cgi-bin/joyful/img/789.java
>>159の方針に従って最小限の改変をした
表示がgdgdなのはそちらで直してくれ
表示の行と列の向きがこれで合ってるかどうか確認するのも面倒なんで
もし逆なら行と列を入れ替えて表示するよう直してくれ

163 名前:162 mailto:sage [2009/09/01(火) 17:27:02 ]
課題そのものはその先があったのか
まあ出力の改変方法が分からなくて改変し切れなかったということみたいだから参考程度にしてくれ

164 名前:157 mailto:sage [2009/09/01(火) 20:13:08 ]
皆さんありがとうございますm(_ _)m

参考にはなりましたが、>>162はLU分解を用いないものでした;

全部で多くても100行程、メソッド数も少なく済ませられるとのことなので、
課題>>158を引き続きお願いします。

165 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 11:44:26 ]
【 課題 】20億個の数字が入っているファイル(約16GB)をソートし、結果をファイルに出力せよ
      数字は32bit(Float)のバイナリフォーマットで記録されている
      基準となる実行時間は15分(4 AMD Opteron 848 processors and 8 GB of RAM上)
      
【 形態 】コマンドプロンプト
【 期限 】9/5 15:00まで
【 Ver  】java version 1.6.0_14
【 補足 】よろしくお願いします

166 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 12:36:51 ]
嫌です

167 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 13:02:34 ]
>>165
動作確認する気にもならんし。遅くても知らん。つか絶対早くは無い。
import java.io.*;
import java.util.Arrays;
public class Floats {
public static void main(String[] args) throws IOException {
float[] datas = new float[2000000000];
DataInputStream dis = new DataInputStream(new BufferedInputStream(new FileInputStream(args[0])));
try {
for(int i=0; i<datas.length; i++) datas[i] = dis.readFloat();
} finally {
dis.close();
}
Arrays.sort(datas);
DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(args[1])));
try {
for(int i=0; i<datas.length; i++) dos.writeFloat(datas[i]);
} finally {
dos.close();
}}}



168 名前:デフォルトの名無しさん [2009/09/02(水) 13:34:44 ]
【 課題 】以下のようなコンソールアプリケーションを作成しなさい。
・画像などのバイナリファイルをコピーする
・プログラムの第1引数でコピー元のファイル名を、第2引数でコピー先のファイル名を指定する
・コピーの際に、必ずバッファリングを行う

【 形態 】1. Javaアプリケーション(main()で開始)/
【 期限 】本日
【 Ver  】1.6.0_13

よろしくお願いします

169 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 13:36:11 ]
>>167
回答ありがとうございます
でも、ファイルが16GBの大きさなので、全部一度に読み込むとメモリが足りません
なんとか、メモリの消費を抑え、15分程度でソートを完了する方法はないでしょうか?
Merge sortで、2個のファイルに分割、その2つのファイルを入力とし、
Mergeしてファイルに書き込む(繰り返し)
というようなことを考えたのですが、いまいちよくわかりません。

170 名前:デフォルトの名無しさん [2009/09/02(水) 14:11:15 ]
【 課題 】以下のようなコンソールアプリケーションを作成しなさい。

・HTMLなどのテキストファイルをウィンドウに表示する
・プログラムの第1引数で指定したファイルを、ウィンドウのJTextAreaで表示する
・読み込みの際、必ずバッファリングを行う


以下のようなコンソールアプリケーションを作成しなさい。

・HTMLなどのテキストファイルを、別の文字コードに変換してコピーする
・コピー元のファイル名と文字コード、およびコピー先のファイル名と文字コードは、
 プログラムの引数ではなく通話的にコンソールから入力する。
・ファイル名や文字コードの指定ミスがあった場合、エラー内容を表示して再入力を促す。
・コピーの際、必ずバッファリングを行う。

【 形態 】1. Javaアプリケーション(main()で開始)/
【 期限 】できれば本日
【 Ver  】1.6.0_13

追加でよろしくお願いします。

171 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 14:12:14 ]
そうか、自分でやるのか〜。
先生うれしいぞ〜

172 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 22:24:24 ]
>>169
その考えで正解だと思うが、何がいまいち分からんの?

173 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 22:52:05 ]
>165
4バイトデータが20億個入った16GBファイルの残り8GB以上は何が入ってるの?
頭から20億個データを読んであとは無視してソート後の出力ファイルは半分のサイズになっていいということ?

174 名前:165 mailto:sage [2009/09/02(水) 23:10:18 ]
>>173
本当だ、おかしいですね、混乱させてすみません
4バイトデータが16GB分あるということです だから出力ファイルも同じサイズになります
数字の数は気にしないでください

>>172
何がわからないのかさえもよくわからないというか…
すみません、自分の力不足です

スピードを求めるなら、Merge sortの前に、メモリに読み込める分を分割して読み込んで
Quick sortした方がいいのでしょうか?

175 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 00:08:35 ]
>>174
クイックソートは意味ない。

単純に
1.ある範囲ごとに記録するファイルを変更する
2.各々のファイルに関して
 2.1そのデータを丸ごとメモリに読めるなら、読んでクイックソート。
 2.2丸ごと読めないならそのファイルに関して1に戻る。
3.全てのファイルでソートが終わったら
 ソート済みのファイルを、記録範囲が小さい順番に結合する。

こんな感じじゃない?

速度を気にするなら、
 1で元ファイルのデータ読み込みで1度に読む量を増やす。
  (当然メモリ使用量は増える)
 2.1で丸ごと読める上限を上げる。
位じゃないかな?

176 名前:172 mailto:sage [2009/09/03(木) 00:19:04 ]
>>174
>>175に追記

マルチプロセッサなら、
2の処理を複数のスレッドに分配すれば、処理時間は短くなるかも知れん。

あと、メモリ8GB積んでいるってことは64bitOSなんだよな?
遅くていいなら>>167は動くはず。
64bitプロセスならデータがメモリに載らないことはない。


177 名前:165 mailto:sage [2009/09/03(木) 01:09:18 ]
>>176
すみません、あまり理解できていません…

3 5 4 1 9 8 7 2 15 を、まず一部分ごとにQuick sort して、
3 4 5 | 1 8 9 | 2 7 15 というようにして、このファイルを先頭から交互に2つのファイルに記録し、
その二つのファイルをmergeする(繰り返し)という意味だったのですが、
やはり、はじめのQuick sortは意味がないでしょうか?

学校のサーバで、OSはRedhat Enterprise Linux 5.3です。



178 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 06:40:43 ]
もし>>174の通りfloatデータが16GB分あるのならデータ個数はintの範囲を超えるので、
たとえメモリが潤沢にあったとしてもデータ全体を収めるfloatの配列を作ることはできない。
また物理メモリサイズと同程度の大きさを確保してデータを収めるために使えば、
JVMやOSその他で使っているメモリが追いやられてしまうので速度的にとても不利になる。
もう少し小さめの例えば4GBくらいのfloat配列を確保して、
(1) 4GB分データをfloat配列に読み込む。
(2) float配列をソートする。クイックソートを使うArrays#sortでもいいし、他の好みのソートでもいいと思う。
(3) ソートされた配列の内容を一時ファイルに書き出す。
(4) (1)-(3)を4回繰り返して4つの一時ファイルを作成する。
ここまでが部分ごとにソートされたデータを作成する段階で、
(5) 1番目と2番目、3番目と4番目に作成した一時ファイルをそれぞれマージして新たなファイルを2個作成する。
(6) (5)で作成した2個のファイルをマージして全体がソートされた出力ファイルとする。
のように2つのファイルの先頭から小さい方(大きい方)を取り出して新しいファイルに出力することを繰り返す。
もちろんファイルの読み書きでは1個ずつとかでなくバッファを利用した読み書きにする。
FileChannelを利用し、バッファも大きいサイズのダイレクトバッファを予め用意して使い回せば、
ファイルの読み書きは少しは速くなるかもしれない。
ディスクの空き容量がそれなりに必要(上の例なら元データ+ソート済みデータ+2段階の一時ファイルで64GB分)なので、
空き容量次第で一時ファイルはマージ終了後にすぐに消さないといけないかもしれない。
それからJVMの最大ヒープサイズの初期設定は物理メモリの1/4か1GBの小さい方なので-Xmxで必要分を指定してやること。
初期ヒープサイズもついでに最初から大きく取っておいてもいいかも。

179 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 06:53:49 ]
> たとえメモリが潤沢にあったとしても
は余計でした。
メモリ容量のこととJavaの文法的に作れないこととは別の話なので。

180 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 08:36:57 ]
>>177
ttp://rg550.hp.infoseek.co.jp/cgi-bin/joyful/img/790.java
効率とかエラー処理とか諸々を全く考えずに大まかな流れだけを実装するとこんな感じに。
データ数を10000個(CHUNK_SIZE=2500)にしてソートされたっぽいファイルができたことだけは確かめた。

181 名前:165 mailto:sage [2009/09/03(木) 14:20:19 ]
>>180
何から何までありがとうございます
これを参考にして、頑張ってみます

182 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 06:15:27 ]
>>177
もう見てないかも知れんが。

3 5 4 1 9 8 7 2 15 を例にとると、
 ・データの範囲を0〜19とする。
 ・データは3つまでしか読めない。
という仮定で、簡略化のため、テンポラリファイルにも3つの値しか書きこまないとする。
テンポラリファイルは7つできる。それぞれ0.dat〜6.datとする。

最初に、3つ読み込む
 メモリには「3,4,5」がある。
 これを0.dat〜6.datに振り分ける。
 この場合、1.datに3,4,5が書き込まれ、他のテンポラリファイルには何のデータもない。
次にもう3つ読む。
 メモリには「1,9,8」がある。
 これを振り分けると、1→0.dat、9→3.dat、8→2.datとなる。
最後に3つ読み振り分ける。7→2.dat、2→0.dat、15→5.datとなる。
この時点で振り分け終わり。各テンポラリファイルには、
 0.dat:「2」、1.dat:「3,4,5」、2.dat:「8,7」、3.dat:「9」、4.dat:「」、5.dat:「」、6.dat:「15」
というデータが入っている。

次に各テンポラリファイルごとに読み込みなおして、クイックソート→書き戻しを行う。
これでテンポラリファイルの内容は
 0.dat:「2」、1.dat:「3,4,5」、2.dat:「7,8」、3.dat:「9」、4.dat:「」、5.dat:「」、6.dat:「15」
となる。これを連結すれば
 「2,3,4,5,7,8,9,15」
となって全体のソートが完了する。

こんな感じ。


183 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 07:35:40 ]
>>182
float範囲内にどう分布しているか分からないのに振り分けてどうするんだよ。
ヘタしたら1ファイルに全部入るだろ。

184 名前:182 mailto:sage [2009/09/04(金) 21:45:19 ]
>>183
むしろ振り分けなくてどうやるつもりなんだ?

1ファイルに入ることは何の問題もないだろ。
そのファイルを再分割するだけじゃん。

185 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 13:04:42 ]
>>184
狭い範囲に集中してた場合、時間が掛からんか?

186 名前:182 mailto:sage [2009/09/05(土) 14:54:44 ]
>>185
何を問題視しているかが良く分からん。
一体何と比較して時間がかかることを懸念しているんだ?
再帰が1段増えるだけじゃん。
再帰の深さもlogNのオーダだよな?

187 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 17:28:29 ]
>>186

DataInputStreamがデータ一周なめるだけで15分の大半を消費しね?
ファイル処理の再帰が不用意に一段深くなるだけでアウトになりかねない。(時間制限的に)

バイナリレベルでファイル分割->ソート(一発メモリ上ソート)->マージ
上の流れならいけると思う。
DataInputStreamを最低2周させる必要がある。
ファイル分割以降の処理をCPUコア数で並行処理できても、
最後のマージを工夫しないと結構きついかな。



188 名前:182 mailto:sage [2009/09/05(土) 18:57:22 ]
>>187
>バイナリレベルでファイル分割->ソート(一発メモリ上ソート)->マージ

その場合マージの過程が大変じゃね?
と思って最初の分割に一工夫入れてマージ作業を楽にしようと考えたんだけど。

>>187のやり方だと、マージ処理で次に結果ファイルに書き込む値を決めるときに
ファイルから値の読み込み→ソートという処理を行う必要があるよね?
メモリ上にN個のデータの最小値を決定して、結果ファイルに書き込んで
次に書き込む値を決定するときに、ファイル上のデータ最小の可能性もある訳で、
メモリ上のN-1個のデータで最小値を決めるわけには行かないよね?
俺的にはこの部分が非常にヤバイ(データの偏り関係に関係なく必ずI/O数が爆発する)と
思うんだけど、その辺は大丈夫なの?


189 名前:182 mailto:sage [2009/09/05(土) 19:11:47 ]
追記。

俺のやり方が突っ込みまくられてるのは、I/Oのデータ量が
馬鹿にならなくなるからだと思う。

んで、確認しておきたいんだけど、このテの問題って
 ・I/Oのデータ量を抑えること
 ・I/Oの要求数を抑えること
のどっちが大切なの?

俺は今まで後者だと思っていたんだけど、この認識が
間違い?



190 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 19:22:50 ]
>>186
どう再分割するかが問題
狭い範囲にデータが集中しているようなものの場合その再分割を
たとえば値が集中した区画を単純に等分していくなら再帰が一段増える程度では済まんだろ
対象のデータ量の規模が大きいから1段増加するだけでもかなりのロスになる
何かlogNよりも大きい方法と比べているわけでないからlogNのオーダーであることは意味を持たない
結局データの分布を調べないといけないんだが
一度にfloatがとりうる各値の度数を調べるには無理がきかない体だ
確かに分布さえ分かっているのなら分布数え上げソートできなくもないが
何段になるか分からない再帰を行うよりも
オンメモリの範囲で分割して回数の分かっているマージを行う>>187の方が現実的

191 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 19:29:06 ]
>>188
マージソートについて何か勘違いしてるんじゃないか?
マージ前の各部分については既にソート済みなんだから、
マージは各部分の先頭を見てどちらかを選択していくだけで済む。

192 名前:182 mailto:sage [2009/09/05(土) 20:10:36 ]
>>190

理解できた。ありがと。

>>191
勘違いしてた。
いっぺんにマージすることばっかり考えてて、ボトムアップ的に
マージすることが頭になかったわ。

確かに>>187が普通のやり方だね。

193 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 21:01:11 ]
floatの上位4ビットを使ってテンポラリファイル0〜15に書き出す。
テンポラリファイル8〜15、0〜7の順にバケットソート→結果ファイルに出力。

これで良い気がしてきた。

194 名前:193 mailto:sage [2009/09/05(土) 21:13:17 ]
NaNの扱いをどうにかしないとだめか

195 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 01:50:59 ]
もちっと期限に余裕があったら182のも書けば165が実際に試してくれたかもな。

196 名前:デフォルトの名無しさん [2009/09/08(火) 04:00:11 ]
【 課題 】
1.
キーボードから次々に非負整数の入力を受け付け、それらの中での正の最小値を表示するプログラムを作成せよ。
データ入力の終わりは負の整数の入力とする。
2.
キーボードから次々に非負整数の入力を受け付け、それらの中での(正の)偶数、奇数、ゼロが
それぞれ何個ずつであったのかを*の数で表示するプログラムを作成せよ。
データ入力の終わりは負の整数の入力とする。

【 形態 】1. Javaアプリケーション(main()で開始   ??
【 GUI  】?
【 期限 】今から2時間後まで
【 Ver  】?
【 補足 】初歩のプログラムの授業の課題で、私自身もさっぱりの状態です・・・
      できるだけ基本的なプログラムでお願いします。


197 名前:196 [2009/09/08(火) 05:45:57 ]
期限を1時間伸ばします
どなたかよろしくお願いいたします




198 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 06:10:51 ]
>>196
課題1
public class MainClass {
public static void main(String[] args) {
java.util.Scanner sc = new java.util.Scanner(System.in);
System.out.print("整数を入力してね(負数で終了):");
int input = sc.nextInt();
int min = input;
while(0<=input){
if(input<min){
min=input;
}
System.out.print("整数を入力してね(負数で終了):");
input = sc.nextInt();
};
System.out.print("最小の値は ");
if(0<=min){
System.out.println(min);
}else{
System.out.println("定まりませんでした ");

}
}

}


199 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 06:11:10 ]
>>196
課題2
public class MainClass {
public static void main(String[] args) {
java.util.Scanner sc = new java.util.Scanner(System.in);
int zero=0,even=0,odd=0;
while(true){
System.out.print("整数を入力してね(負数で終了):");
int input = sc.nextInt();
if(0<=input){
if(input==0){
zero++;
}else if(input%2==0){
even++;
}else{
odd++;
}
}else{
break;
}
};
System.out.println("ゼロの個数:"+zero);
System.out.println("偶数の個数:"+even);
System.out.println("奇数の個数:"+odd);
}

}


200 名前:196 [2009/09/08(火) 06:47:36 ]
>>198-199
ありがとうございます。非常に助かりました。


201 名前:デフォルトの名無しさん mailto:sage [2009/09/09(水) 02:15:25 ]
課題2の結果は、「*」の繰り返しで表示するんじゃないの?

微妙に仕様と違う動きなのが
初心者っぽさの演出にはなっているが…。

202 名前:デフォルトの名無しさん mailto:sage [2009/09/09(水) 02:24:56 ]
非常に付きで助かったんだからいいんじゃないの?
依頼者は動作確認どころか課題そのものを読んでもいないのかもしれないけど

203 名前:デフォルトの名無しさん mailto:sage [2009/09/09(水) 03:10:50 ]
>>201
ああ、そうだっけ。
まあ、そのくらいでき…できるならここに丸投げしてないな。

204 名前:デフォルトの名無しさん mailto:sage [2009/09/10(木) 20:54:12 ]
【 課題 】ttp://rg550.hp.infoseek.co.jp/cgi-bin/joyful/img/791.java
【 形態 】1. Javaアプリケーション(main()で開始?
【 GUI  】?
【 期限 】9月11日正午まで
【 Ver  】?
【 補足 】始めたばかりで不明な所が多く、申し訳ございません。
      よろしくお願いします。

205 名前:デフォルトの名無しさん mailto:sage [2009/09/10(木) 21:10:36 ]
>>204
Webページの表示はフレーム上、ブラウザ上?

206 名前:205 mailto:sage [2009/09/10(木) 21:15:02 ]
>>204
フレーム上でお願いします。

207 名前:205 mailto:sage [2009/09/10(木) 21:16:04 ]
名前と安価が逆でしたorz



208 名前:デフォルトの名無しさん mailto:sage [2009/09/10(木) 21:21:45 ]
>>206
フレーム上にページを表示するとなると表示はどのレベルまでサポートするの?

209 名前:204 mailto:sage [2009/09/10(木) 21:30:15 ]
>>208
普段ブラウザで見ているのと同じ様に表示されるようにしたいのです
上手く答えられなくてすいません

210 名前:デフォルトの名無しさん mailto:sage [2009/09/10(木) 22:19:47 ]
>>209
JEditorPaneレベルならともかく、
明日の昼までにフルブラウザは厳しいな。
っていうか、俺には出来ない。

偉い人、よろしく。

211 名前:204 mailto:sage [2009/09/10(木) 22:45:39 ]
うはっ、フルプラウザとまではいかなくても
ただWebページが表示されればいいなと思っていましたが、難しいですかね。

212 名前:デフォルトの名無しさん [2009/09/11(金) 21:26:32 ]
>>204
一応、RESETボタンを押すとimg2の画像をimg1に戻すようにしたソース↓
ttp://rg550.hp.infoseek.co.jp/cgi-bin/joyful/img/792.java

画像クリックのやつはわからんかった


213 名前:デフォルトの名無しさん [2009/09/11(金) 21:28:27 ]
よく見たら期限過ぎてた

214 名前:デフォルトの名無しさん [2009/09/11(金) 23:11:27 ]
【 課題 】matomesite.hp.infoseek.co.jp/cgi-bin/src/up0550.txt
【 形態 】1. Javaアプリケーション(main()で開始)/
【 期限 】9月13日
【 Ver  】1.6.0_11

丸投げで申し訳ないのですが、どなたかお願いします

215 名前:デフォルトの名無しさん mailto:sage [2009/09/12(土) 00:37:38 ]
訂正
語群 11.k=k+1 です

丸投げといったのですが、所々わかったところがあるので追記です

アは5.Math.abs((x[k]-x[k-1])/x[k-1])<eps か 9.Math.abs(f(x[k]))<eps
イは11.k=k+1 か 13.iteration = k
ウは3..breakで間違いないと思います
エ、オはわかりません

216 名前:デフォルトの名無しさん mailto:sage [2009/09/12(土) 01:17:04 ]
>>214
ア=5
イ=13
ウ=3
エ=4
オ=12

と思ったけど、12の括弧が閉じてない。

217 名前:デフォルトの名無しさん mailto:sage [2009/09/12(土) 01:55:18 ]
>>216
すみません、12の括弧は書き忘れました
ありがとうございました



218 名前:デフォルトの名無しさん [2009/09/12(土) 11:08:51 ]
ここに出てる課題を解けば勉強になると思ってる時期がありました

219 名前:デフォルトの名無しさん [2009/09/12(土) 18:33:53 ]
次の数列の和を小数第11を四捨五入して第10位まで求めよ
またそれぞれについて、どちらの方が誤差が少なくなるか
あるいは同じ値になるか?理由もつけて答えよ

N=10 20 30 に対して
(1)納n=1,N](1/(2^n)
(2)納n=N,1](1/(2^n)

【 形態 】1. Javaアプリケーション(main()で開始)
【 期限 】7月14日 
【 Ver  】1.6.0_11

前スレで教えていただいたプログラムの数値部分だけをいじったのですが
2^nをどのように表記すればいいのかがわからず解がうまくでません

rg550.hp.infoseek.co.jp/cgi-bin/joyful/img/793.txt

(Math.pow(2,k)の所がおかしいのだと思うのですが・・・初歩的なことですみません

よろしくお願いします

220 名前:デフォルトの名無しさん mailto:sage [2009/09/12(土) 19:21:02 ]
>>218
まあ、普段ならしないことをやるチャンスはある。殆どないけど。

221 名前:デフォルトの名無しさん mailto:sage [2009/09/12(土) 19:31:54 ]
>>219
いくつになれば、正しいんだ?

222 名前:デフォルトの名無しさん [2009/09/12(土) 19:58:25 ]
>>221
答えはわかりませんが、張ったソースは数列の和ではなく誤差を調べるものでした
言葉足らずですみません

>>次の数列の和を小数第11を四捨五入して第10位まで求めよ
の部分は無視してもらって構いません

N=10、20、30の全ての場合で誤差がでず
まったく同じ数値になってしまったのでおかしいなと思って質問しました


223 名前:デフォルトの名無しさん mailto:sage [2009/09/12(土) 21:30:26 ]
>>222
足す順序で誤差が出るってこと?

どうなると誤差を調べたことになるの?

224 名前:デフォルトの名無しさん mailto:sage [2009/09/12(土) 22:14:51 ]
>>223
そういうことです
例えば前スレの

N=10 100 1000 10000に対して
(1)納k=1,N](1/(k^2)
(2)納k=N,1](1/(k^2)

この場合の結果が
www.dotup.org/uploda/www.dotup.org134514.jpg
で、N=10以外で数値に誤差がでました
計算誤差(丸め誤差や打ち切り誤差?)が起こってるんだと思うのですが

225 名前:デフォルトの名無しさん mailto:sage [2009/09/12(土) 22:32:19 ]
>>219
Math.powが怪しいとか適当なことを言っていないできちんと誤差評価した方が建設的だ
doubleは52ビットの仮数部を持っている
そして1/2のべき乗を2^-1から始めて大きい順か2^-30から始めて小さい順に加算するということは
その総和であるsumでは加算するたびに仮数部のビットを1個ずつ立てていくことになる
つまり2進数表記で
0.1 + 0.01 + 0.001 + ...
というように足した回数桁分の1が並ぶ数が総和になる
doubleでは仮数部の最も大きいビットは1であると決められて省略されているから
この数を表すのに必要な仮数部は29ビットになる
どちらの順から加算を始めたとしても52ビットある仮数部で十分に総和も加算する数自体も正確に表せる
元々正確に表せている数値を10進小数第10位までの表記になっても同じになるのは当然

1/2のべき乗の場合はまあ大丈夫だけど四捨五入は10進数の数値操作なのでdoubleの値の評価に使うときは注意

226 名前:デフォルトの名無しさん mailto:sage [2009/09/12(土) 22:34:19 ]
> この数を表すのに必要な仮数部は29ビットになる
N=30の場合ね

227 名前:デフォルトの名無しさん mailto:sage [2009/09/12(土) 22:49:37 ]
>>225
ありがとうございます
誤差は起こり得ないということですね
試しに52ビットを超える場合(N=54以上)でやってみたところ、すべて1.0になりました
これの意味することが、まだいまいち把握できてないのですが
あとは参考書なり読んでみます

お騒がせしてしまって、すみませんでした



228 名前:デフォルトの名無しさん mailto:sage [2009/09/12(土) 23:11:03 ]
>>227
ついでなので
その場合足す数はdoubleで正しく表せるが足される総和の方が正確に表せる範囲を超える
大きい順に足していった場合N=53で総和の仮数部が一杯になり次の2^-54を足した段階で総和は正確に表せず1となってしまう
次の2^-55以降を足してもそれは1のイプシロンつまり機械イプシロン以下の大きさしかないから総和は変化しない
小さい順に足していった場合N=8で総和の仮数部が一杯になり次の2^-7を足した段階で総和は正確に表せず2^-6となってしまう
あとは2^-6、2^-5と足していけば総和は2^-5、2^-4と増えてゆき最後は1になる

229 名前:デフォルトの名無しさん mailto:sage [2009/09/12(土) 23:30:59 ]
>>228
なるほど
まだなんとなくですが、イメージは掴めました
わざわざ詳しい説明をしてくださって、ありがとうございました

230 名前:デフォルトの名無しさん mailto:sage [2009/09/12(土) 23:31:30 ]
またNを書き忘れたorz
>>228の話はN=60の場合ね
要は有限桁しか表せない浮動小数点では
1 * 2^-m = 0.1111111....111 * 2^-m
とみなされてしまう桁長が右辺の数値にはあるということ
mは大きい順なら0、小さい順なら足し始めた数に応じる

231 名前:デフォルトの名無しさん [2009/09/20(日) 16:20:59 ]
【 課題 】以下のようなサーバプログラムCountServer.javaとクライアントプログラム
CountClient.javaを作成してください。

      [条件]
      ・サーバは、クライアントから文字列を受信し、その文字数をカウントして
       結果をクライアントに返す。
      ・クライアントプログラムを実行時に、コマンドラインから、サーバホスト名
       java CountClient サーバホスト名 "文字列"
      ・クライアントは、サーバからの結果を受け取り、画面に表示する。
      ・サーバは、ポート番号 4321 で接続要求を受け付けるようにする。

サーバプログラムの実行
>java CountServer

クライアントプログラムの実行と実行結果
>java CountClient host1 "Java Programming"
16  

【 形態 】Javaアプリケーション(main()で開始) 
【 GUI  】制限なし
【 期限 】9月22日午後5時までお願いします。
【 Ver  】1.6.0_11
【 用語 】
【 補足 】丸投げです。お願いします。


232 名前:デフォルトの名無しさん mailto:sage [2009/09/20(日) 18:15:50 ]
>>231
rg550.hp.infoseek.co.jp/cgi-bin/joyful/img/794.zip

233 名前:デフォルトの名無しさん [2009/09/20(日) 19:39:06 ]
>>232
CountServer.javaでは4行目で
「インポートされた java.io.DataOutputStream は 1 度も使用されていません」
とエラーが出て、
countClient.javaでは18行目で
「フィールド CountClient.inDataStream はローカルで読み取られません」
とエラーが出ました。


CountServer.javaの方は単純に4行目を削除すればよいのでしょうか?


234 名前:デフォルトの名無しさん mailto:sage [2009/09/20(日) 19:50:46 ]
>>233
それ、使ってないね。決して良いよ。
16:private DataInputStream inDataStream;
33:inDataStream = new DataInputStream(inStream);


235 名前:デフォルトの名無しさん mailto:sage [2009/09/20(日) 20:50:18 ]
決しちゃっていいのか

236 名前:デフォルトの名無しさん mailto:sage [2009/09/20(日) 20:58:00 ]
おう、キッチリと決しちゃってくれ。悔いが残らぬように。

237 名前:デフォルトの名無しさん mailto:sage [2009/09/20(日) 21:02:04 ]
エラーと警告の区別がついていないのはいいのか



238 名前:デフォルトの名無しさん mailto:sage [2009/09/20(日) 21:08:39 ]
学ぶ事を放棄して来たのだから良いんじゃないか。

239 名前:232 mailto:sage [2009/09/20(日) 23:06:20 ]
>>231
>>232のコードのリファクタ版。
今回はワーニングでないと思うが、なんかあったらレスくれ。
rg550.hp.infoseek.co.jp/cgi-bin/joyful/img/795.zip

240 名前:デフォルトの名無しさん mailto:sage [2009/09/21(月) 05:43:28 ]
嫌だ

241 名前:デフォルトの名無しさん mailto:sage [2009/09/21(月) 09:34:50 ]
じゃあ好きにしろ

242 名前:デフォルトの名無しさん mailto:sage [2009/09/21(月) 09:57:14 ]
(´・ω・`)やんのかお?

243 名前:232 mailto:sage [2009/09/21(月) 17:09:28 ]
>>231
暇なのでまたちょっとリファクタ

変更点:
最大文字数制限に対応
複数クライアント対応
スレッドプール変更
rg550.hp.infoseek.co.jp/cgi-bin/joyful/img/796.zip

244 名前:デフォルトの名無しさん mailto:sage [2009/09/21(月) 17:20:33 ]
もういいって・・・

245 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 13:40:20 ]
【 課題 】1.ユニークな9桁の数値100万個を記述した乱数ファイルを作成する
      ※数値はランダムに生成し作成された順に記述される
      ※9桁目はゼロであってはならない→×000000001 ○100000000
      ※ひとつの数値が1行に記述され改行で区切られる
      ※乱数ファイルがユニークに作成されている根拠をコメントに書け
      
      2.9桁の数値を入力し、その数値の乱数ファイル上の行番号と
      昇順でソートした際の順序番号で表示するアプリを作成する
      ※乱数ファイルは一度しかパースしてはならない
      ※ライブラリのデータ構造を使用してはならない(プリミティブタイプ、配列は可)
      ※ブルートフォースアルゴリズムを使用してはならない

      3.エクストラポイント
      ※検索手順をGUI上で可視化する(制限なし)

【 形態 】1. Javaアプリケーション(main()で開始)
【 GUI  】2. Swing
【 期限 】9月24日18:00まで
【 Ver  】1.6.0_15
【 用語 】
【 補足 】丸投げです。宜しくお願いします。




246 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 01:18:41 ]
>>245
>※ブルートフォースアルゴリズムを使用してはならない
制約の意味がわからない

247 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 01:21:44 ]
>>246
総当たりの事です。要はO(n)のアルゴリズムではダメ。



248 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 01:49:50 ]
>>247
未ソートのデータから検索なんて、他に方法はないのでは?

249 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 09:04:13 ]
>>248
ありませんよ

250 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 11:47:56 ]
ソートが出来ない訳ではありませんが、パース出来るのは一度だけです。

251 名前:245 mailto:sage [2009/09/23(水) 14:30:49 ]
誰か分かる方いらっしゃらないでしょうか。

252 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 23:25:48 ]
>>251
いや、未ソートのデータの検索に総当り以外のアルゴリズムなんて無いだろ。

253 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 23:53:31 ]
>>252
一度パースができるとあるので、そこでソートしながら自前のデータ構造にいれれば良いんじゃね。
で、出来上がったデータ構造上をO(log)位のアルゴリズムで検索すれば
ソートオーダの位置と未ソート時の位置を取得できるんじゃないのかな?俺には作れないけど。

254 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 01:18:09 ]
>>253
それでいいのならソート自体が目的ではないのでO(n)のメモリが必要なデータ構造を用意する必要はない。
ファイルをスキャンしながら検索対象以下の数値の個数をカウントして、
最後まで読み終わった時点で検索対象が現れていたら、
現れた行番号が「乱数ファイル上の行番号」であり、
検索対象以下の数値の個数が「昇順でソートした際の順序番号」になるので、
行番号と個数を覚えておくだけのO(1)のメモリで済むしファイルを読んだ後の探索もいらない。
でもこれって結局ファイル上ではあるもののO(n)の探索には変わりないんだよね。
ファイルを一通り読んでいいのに探索はO(n)では駄目とかの>>245の要求が矛盾しているというか。

255 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 02:10:30 ]
>>254
その場合2回目の検索はどうする?

256 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 02:24:21 ]
複数回問い合わせることを前提に、検索部分のコストだけということでは?
rg550.hp.infoseek.co.jp/cgi-bin/joyful/img/798.java

257 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 02:42:28 ]
Arrays.sortとArrays.binarySearchで許してくれんのかな。

余計かもしれんがDataのamountがIntegerなのはcompareToしたいから?
intのまま減算して返せばよくね?



258 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 02:49:03 ]
>>257
>Arrays.sortとArrays.binarySearchで許してくれんのかな。

>※ライブラリのデータ構造を使用してはならない(プリミティブタイプ、配列は可)
って文言には反してないが、どうなんだろうね。
出題者の期待している解答ではないかも。

>余計かもしれんがDataのamountがIntegerなのはcompareToしたいから?
yes
intの差の方が良いね。

259 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 03:05:17 ]
>>256
【 GUI  】2. Swing







[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](;´∀`)<316KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef