まず、なぜこれを書くのかお話しします。 - プログラマーになるのは本当に大変です。長い年月を経ても、レンガ職人ほど達成感は高くありません。少なくとも建物を建てることはできますが(そして良い体型になります)、いつ悪い子がやって来てハードドライブをフォーマットしてしまい、すべてが消えてしまうかわかりません。
- 今学期は明らかにフロントエンドに集中していませんでした... ああ、将来的にはまだ食事をしたいと思っていますが、今学期は絶対に休んでいませんでした。多くの人が退屈だと思うかもしれない多くのことで忙しかっただけです。
- 今学期はつまらないことが多すぎて、多くの時間を無駄にしてしまったので、講師は非常にがっかりし、私は非常に劣等感を感じました。いくつかのことを整理し、考え方を調整する必要があります。
- 宿題に対する変な考えが多いので、ふざけなければ宿題ではないです。皆さん、もっと批判していただければと思います。
- おそらく、問題の解決に役立つ記事があるからでしょう。
- Markdownを試してみたいです。
美しい写真 さあ、本題に入りましょう バックエンド実装部分: - io = "socket.io"が必要です
- http = "http"が必要
- fs = "fs"が必要
- express = 「express」が必要
- mime = “mime”が必要
- アプリ=エクスプレス()
- サーバー= http .createServer アプリ
- サーバー.listen 8080
- console.log "8080 をリスニングしています"
app.get "/",(req,res)-> - パス = "#{__dirname}/console.html"
- res.writeHead 200、 「コンテンツ タイプ」 :mime.lookup(パス)
- res.終了fs.readFileSync パス
app.get "/jquery.min.js", (req, res)-> - パス = "#{__dirname}/jquery.min.js"
- res.writeHead 200 、 「コンテンツタイプ」 :mime.lookup(パス)
- res.end fs.readFileSync パス
app.get "/bootstrap.min.js", (req, res)-> - パス = "#{__dirname}/bootstrap.min.js"
- res.writeHead 200 、 「コンテンツタイプ」 :mime.lookup(パス)
- res.end fs.readFileSync パス
app.get "/bootstrap.min.css", (req, res)-> - パス = "#{__dirname}/bootstrap.min.css"
- res.writeHead 200 、 「コンテンツタイプ」 :mime.lookup(パス)
- res.end fs.readFileSync パス
現在の時刻を取得する = -> d = 新しい日付() "#{d.getFullYear()}-#{d.getMonth()+1}-#{d.getDate()} #{d.getHours()}:#{d.getMinutes()}:#{d.getSeconds()}" を返します クラス dynamicPack - パック:(データ)->
- c=[]
- 私 = 0
- 0は
- i<data.m+ 1の場合
- c[i] = []
- c[i][ 0 ] = 0
- 私は++
- j<データ.n+ 1の場合
- c[ 0 ][j] = 0
- j++
- 私 = 1
- i<data.m+ 1の場合
- 1 = 1です
- j<データ.n+ 1の場合
- data.w[i- 1 ]<=jの場合
- c[i- 1 ][j]<c[i- 1 ][j-data.w[i- 1 ]]+data.v[i- 1 ]の場合
- c[i][j]=c[i- 1 ][j-データ.w[i- 1 ]]+データ.v[i- 1 ]
- それ以外
- c[i][j]=c[i- 1 ][j]
- それ以外の場合、c[i][j] = c[i- 1 ][j]
- j++
- 私は++
- cを返します。
- 印刷:(c,データ)->
- x = []
- i = データ.m
- n = データ.n
- 文字列 = ""
- #コンソール.log c[i][m]
- i> 0 の場合
- c[i][n] > c[i- 1 ][n]の場合
- x[i- 1 ] = 1 である。
- n -= データ.w[i- 1 ]
- それ以外の場合x[i- 1 ] = 0
- 私 -
- 私 = 0
- カウント = 0
- i<data.m の場合
- カウント += x[i]*データ.v[i]
- str += (i+ 1 )+ "," x[i]!= 0の場合
- 私は++
- str+ "合計値#{count}"を返します
クラス knapPack - パック: (データ)->
- @v = データ.v
- @w = データ.w
- @m = データ.m
- @n = データ.n
- @cw = 0
- @cv = 0
- @put = []
- @ベストp = 0
-
- temp_order = 0 ;
- 温度 = 0
- 犯人 = []
- 私 = 0
- 私は< @m
- 垂直[i] = @v [i] / @w [i]
- @put [i] = 0 ;
- 私は++
- console.log パープ
- 私 = 0
- 私は< @m
- j=i+ 1 です。
- j< @mの場合
- perp[i]<perp[j]の場合
- 温度 = @v [i]
- @v [i] = @v [j]
- @v [j] = 温度
-
- 温度 = @w [i]
- @w [i] = @w [j]
- @w [j] = 温度
- j++
- 私は++
- バックトラック: (i)->
- コンソールログ i
- @bound私
- もしi> @m
- @bestp = @cv
- 戻る
- もし @cw + @w [i] <= @n
- @cw += @w [i]
- @cv += @v [i]
- @put [i] = 1
- @バックトラック(i+ 1 )
- @cw -= @w [i]
- @cv -= @v [i]
- もし @bound (i+ 1 )> @bestp
- @バックトラック(i+ 1 )
- 境界:(i)->
- 左w = @n - @cw
- b = @cv
- i<= @mかつ@w [i]<=leftw であるとき
- 左w -= @w [i]
- b += @v [i]
- 私は++
- b+= @v [i]/ @w [i]*leftw ( i< @mの場合)
- bを返す
- 印刷:(データ)->
- @pack (データ)
- コンソールログ@w
- コンソールログ@v
- @バックトラック( 0 )
- コンソールログ@put
- 戻る ベスト
dask = (メッセージ)-> - 答え = ""
- データ = JSON.parse メッセージ
- console.log データ
-
- d =新しいダイナミックパック()
- console.log d.pack(データ)
- 答え += "動的プログラミング、項目を選択" +d.print d.pack(data),data
- 返答を返す
kask = (メッセージ)-> - 答え = ""
- データ = JSON.parse メッセージ
- console.log データ
-
- k =新しいknapPack()
- 答え += "分岐限定法、*** 解" +k.print データ
- 返答を返す
io.listen(server).on "接続",(ソケット)-> - socket.on "msg" 、(msg)->
- ##console.log メッセージ
- socket.emit "msg" 、{time:getCurrentTime()、text: "計算中..." }
- socket.emit "msg" 、{time:getCurrentTime()、text:dask(msg)}
- socket.emit "msg" 、{time:getCurrentTime()、text:kask(msg)}
- ##socket.broadcast.emit "msg" 、データ
-
- console.log "#{getCurrentTime()}:接続されました"
フロントエンド実装部分: - 入力例: {"n":10,"m":3,"w":[3,4,5],"v":[4,5,6]}。ここで、n はバックパックの容量、m はアイテムの数です。
オリジナルリンク: http://my.oschina.net/gongbaodd/blog/293129 |