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: データマイニングと機械学習アルゴリズム

ブログ    
ブログ    

推薦する

...

...

BBAug: PyTorch 用のオブジェクト検出境界ボックスデータ拡張パッケージ

多くのニューラル ネットワーク モデルと同様に、オブジェクト検出モデルは大量のデータでトレーニングす...

AIを信頼していない経営者は何を考えているのか?

経営幹部は長い間、より高度な意思決定にデータ分析を使用することに抵抗し、AI 支援による意思決定より...

機械学習実践体験: データプラットフォームの設計と構築

近年人気の技術である機械学習は、数多くの「人工知能」製品でよく知られているだけでなく、従来のインター...

...

2020 年の優れた機械学習プロジェクト 23 件 (ソース コード付き)

[[336522]]ビッグデータダイジェスト制作編集者: ルナ教科書で習ったことと実際の業務に乖離...

AIは人間の脳を模倣しています! 2021年のトップ10の会議論文: 脳は「教師なし」でも学習する

神経科学は人工知能の「超進化」の鍵となるのか?ディープラーニングやディープニューラルネットワークが流...

すべてを圧縮するだけです! OpenAIの主任科学者イリヤ・スツケバーが教師なし学習に注目

最近、OpenAI の主任科学者 Ilya Sutskever 氏が、計算理論の研究に重点を置く S...

...

NeRF を放棄し始めていますか?ガウススプラッティングが自動運転のシナリオで人気があるのはなぜですか?

この記事は、Heart of Autonomous Driving の公開アカウントから許可を得て転...

ロボット市場は飛躍の準備ができており、人間と機械の統合が主流のトレンドとなっている

最近、2021年世界ロボット大会が北京で盛大に開幕しました。ロボット分野の最先端技術と最新の成果が展...

自動運転の時代が加速するにつれ、支援システムは自動車の標準装備になるかもしれない

近年、自動運転分野で優位に立ち、自動車産業の発展の主導権を握るために、多くの国が自動運転の路上テスト...

グラフ最適化のためのエンドツーエンドの転送可能な深層強化学習

[[425806]]多様なアクセラレータ セットでトレーニングされた大規模で複雑なニューラル ネット...