01 コーヒーとsocket.ioで実装されたナップサックアルゴリズム

01 コーヒーとsocket.ioで実装されたナップサックアルゴリズム

まず、なぜこれを書くのかお話しします。

  • プログラマーになるのは本当に大変です。長い年月を経ても、レンガ職人ほど達成感は高くありません。少なくとも建物を建てることはできますが(そして良い体型になります)、いつ悪い子がやって来てハードドライブをフォーマットしてしまい、すべてが消えてしまうかわかりません。
  • 今学期は明らかにフロントエンドに集中していませんでした... ああ、将来的にはまだ食事をしたいと思っていますが、今学期は絶対に休んでいませんでした。多くの人が退屈だと思うかもしれない多くのことで忙しかっただけです。
  • 今学期はつまらないことが多すぎて、多くの時間を無駄にしてしまったので、講師は非常にがっかりし、私は非常に劣等感を感じました。いくつかのことを整理し、考え方を調整する必要があります。
  • 宿題に対する変な考えが多いので、ふざけなければ宿題ではないです。皆さん、もっと批判していただければと思います。
  • おそらく、問題の解決に役立つ記事があるからでしょう。
  • Markdownを試してみたいです。

美しい写真

さあ、本題に入りましょう

バックエンド実装部分:

  1. io = "socket.io"が必要です
  2. http = "http"が必要
  3. fs = "fs"が必要
  4. express = 「express」が必要
  5. mime = “mime”が必要
  6. アプリ=エクスプレス()
  7. サーバー= http .createServer アプリ
  8. サーバー.listen 8080
  9. console.log "8080 をリスニングしています"

app.get "/",(req,res)->

  1. パス = "#{__dirname}/console.html"  
  2. res.writeHead 200、 「コンテンツ タイプ」 :mime.lookup(パス)
  3. res.終了fs.readFileSync パス

app.get "/jquery.min.js", (req, res)->

  1. パス = "#{__dirname}/jquery.min.js"  
  2. res.writeHead 200 「コンテンツタイプ」 :mime.lookup(パス)
  3. res.end fs.readFileSync パス

app.get "/bootstrap.min.js", (req, res)->

  1. パス = "#{__dirname}/bootstrap.min.js"  
  2. res.writeHead 200 「コンテンツタイプ」 :mime.lookup(パス)
  3. res.end fs.readFileSync パス

app.get "/bootstrap.min.css", (req, res)->

  1. パス = "#{__dirname}/bootstrap.min.css"  
  2. res.writeHead 200 「コンテンツタイプ」 :mime.lookup(パス)
  3. res.end fs.readFileSync パス

現在の時刻を取得する = ->
d = 新しい日付()
"#{d.getFullYear()}-#{d.getMonth()+1}-#{d.getDate()} #{d.getHours()}:#{d.getMinutes()}:#{d.getSeconds()}" を返します

クラス dynamicPack

  1. パック:(データ)->
  2. c=[]
  3. 私 = 0  
  4. 0 
  5.      i<data.m+ 1の場合 
  6. c[i] = []
  7. c[i][ 0 ] = 0  
  8. 私は++
  9.      j<データ.n+ 1の場合 
  10. c[ 0 ][j] = 0  
  11. j++
  12. 私 = 1  
  13.      i<data.m+ 1の場合 
  14. 1 = 1です 
  15.          j<データ.n+ 1の場合 
  16.              data.w[i- 1 ]<=jの場合
  17.                  c[i- 1 ][j]<c[i- 1 ][j-data.w[i- 1 ]]+data.v[i- 1 ]場合
  18. c[i][j]=c[i- 1 ][j-データ.w[i- 1 ]]+データ.v[i- 1 ]
  19.                 それ以外 
  20. c[i][j]=c[i- 1 ][j]
  21.             それ以外の場合、c[i][j] = c[i- 1 ][j]
  22. j++
  23. 私は++
  24.      cを返します
  25. 印刷:(c,データ)->
  26. x = []
  27. i = データ.m
  28. n = データ.n
  29. 文字列 = ""  
  30. #コンソール.log c[i][m]
  31.      i> 0 の場合 
  32.          c[i][n] > c[i- 1 ][n]の場合
  33. x[i- 1 ] = 1 である。  
  34. n -= データ.w[i- 1 ]
  35.         それ以外の場合x[i- 1 ] = 0  
  36. 私 -
  37. 私 = 0  
  38. カウント = 0  
  39.      i<data.m の場合
  40. カウント += x[i]*データ.v[i]
  41. str += (i+ 1 )+ ","   x[i]!= 0の場合 
  42. 私は++
  43.      str+ "合計値#{count}"を返します 

クラス knapPack

  1. パック: (データ)->
  2.      @v = データ.v
  3.      @w = データ.w
  4.      @m = データ.m
  5.      @n = データ.n
  6.      @cw = 0  
  7.      @cv = 0  
  8.      @put = []
  9.      @ベストp = 0  
  10.    
  11. temp_order = 0 ;
  12. 温度 = 0  
  13. 犯人 = []
  14. 私 = 0  
  15.     は< @m  
  16. 垂直[i] = @v [i] / @w [i]
  17.          @put [i] = 0 ;
  18. 私は++
  19. console.log パープ
  20. 私 = 0  
  21.     は< @m  
  22. j=i+ 1 です。  
  23.          j< @mの場合 
  24.              perp[i]<perp[j]の場合
  25. 温度 = @v [i]
  26.                  @v [i] = @v [j]
  27.                  @v [j] = 温度
  28.    
  29. 温度 = @w [i]
  30.                  @w [i] = @w [j]
  31.                  @w [j] = 温度
  32. j++
  33. 私は++
  34. バックトラック: (i)->
  35. コンソールログ i
  36.      @bound
  37.     もしi> @m  
  38.          @bestp = @cv  
  39.         戻る 
  40.     もし  @cw + @w [i] <= @n  
  41.          @cw += @w [i]
  42.          @cv += @v [i]
  43.          @put [i] = 1  
  44.          @バックトラック(i+ 1 )
  45.          @cw -= @w [i]
  46.          @cv -= @v [i]
  47.     もし  @bound (i+ 1 )> @bestp  
  48.          @バックトラック(i+ 1 )
  49. 境界:(i)->
  50. 左w = @n - @cw  
  51. b = @cv  
  52.      i<= @mかつ@w [i]<=leftw であるとき
  53. 左w -= @w [i]
  54. b += @v [i]
  55. 私は++
  56. b+= @v [i]/ @w [i]*leftwi< @m場合 
  57.      bを返す
  58. 印刷:(データ)->
  59.      @pack (データ)
  60. コンソールログ@w  
  61. コンソールログ@v  
  62.      @バックトラック( 0 )
  63. コンソールログ@put  
  64.     戻る ベスト 

dask = (メッセージ)->

  1. 答え = ""  
  2. データ = JSON.parse メッセージ
  3. console.log データ
  4.    
  5. d =新しいダイナミックパック()
  6. console.log d.pack(データ)
  7. 答え += "動的プログラミング、項目を選択" +d.print d.pack(data),data
  8. 返答を返す

kask = (メッセージ)->

  1. 答え = ""  
  2. データ = JSON.parse メッセージ
  3. console.log データ
  4.    
  5. k =新しいknapPack()
  6. 答え += "分岐限定法、*** 解" +k.print データ
  7. 返答を返す

io.listen(server).on "接続",(ソケット)->

  1. socket.on "msg" 、(msg)->
  2. ##console.log メッセージ
  3. socket.emit "msg" 、{time:getCurrentTime()、text: "計算中..." }
  4. socket.emit "msg" 、{time:getCurrentTime()、text:dask(msg)}
  5. socket.emit "msg" 、{time:getCurrentTime()、text:kask(msg)}
  6. ##socket.broadcast.emit "msg" 、データ
  7.    
  8. console.log "#{getCurrentTime()}:接続されました"  

フロントエンド実装部分:

  • 入力例: {"n":10,"m":3,"w":[3,4,5],"v":[4,5,6]}。ここで、n はバックパックの容量、m はアイテムの数です。

オリジナルリンク: http://my.oschina.net/gongbaodd/blog/293129

<<:  Apple、Google Play ランキングアルゴリズム

>>:  Liang Yanbo: データマイニングと機械学習アルゴリズム

ブログ    
ブログ    

推薦する

実践 | 人工知能が小売体験を向上させる 20 の例

小売体験は長年にわたってあまり変わっていません。つまり、店に入って、適切な製品を見つけて、それを購入...

2021 年の機械学習の 6 つのトレンド

機械学習は今日ではよく知られた革新的な技術となっています。ある調査によると、現在人々が使用しているデ...

データ構造とアルゴリズム: グラフ構造

写真グラフ構造は、ツリー構造よりも複雑な非線形構造です。ツリー構造では、ノード間に分岐階層関係があり...

人工知能の進化:過去、現在、そして未来

近年、人工知能はロボットが人間のように考え、行動することを可能にする強力なツールへと発展しました。さ...

AIインタラクションエクスペリエンスを向上させるにはどうすればよいでしょうか?まずこの三元理論を理解しましょう

概要:人工知能製品が徐々に人々の仕事、生活、娯楽に浸透し、あらゆる分野に革命的な変化をもたらすことは...

...

OpenAIが「Copyright Shield」機能を開始、AI著作権問題の支払いプラットフォーム

IT Homeは11月7日、本日開催されたOpenAI初の開発者会議で、OpenAIが「Copyri...

...

人工知能は、電力網とユビキタス電力のIoTの構築と開発にとって重要な方向性となるだろう

[[285204]]現在、モバイルインターネット、ビッグデータ、スーパーコンピューティングなどの新し...

...

人工知能クロニクル | これら 10 大イベントは、人工知能の 64 年間の発展を記録しています

1956 年の夏、アメリカの小さな町ハノーバーの静かなダートマス大学に、ジョン・マッカーシー (Li...

AIユニコーンがIPOに群がり、資本市場を刺激。シナリオアプリケーションは複数の場所で爆発的に増加する可能性がある

美景記者:李紹廷 美景編集者:温多2020年を振り返ると、新型コロナウイルス感染症の突然の流行は間違...

FMI2017----人工知能とビッグデータが時代を力づける

2017年8月5日、ペガサスが主催する「FMI人工知能&ビッグデータサミットフォーラム」が北京国家会...

ハードウェアとコードを分離し、APIを安定化したPyTorch Lightning 1.0.0が正式リリース

Keras と PyTorch はどちらも初心者にとても優しいディープラーニング フレームワークです...