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

ブログ    

推薦する

4つのディープラーニングフレームワークの紹介:初心者はどのように選択すべきか?

[[381945]] 01 テアノTheano は、BSD ライセンスの下でリリースされたオープン...

毎日のアルゴリズム: 文字の繰り返しのない最長の部分文字列

[[421075]]この記事はWeChatの公開アカウント「3分でフロントエンドを学ぶ」から転載した...

OpenAIと競合しますか? Jina AI、オープンソースの8Kテキスト埋め込みモデルを発表

10月27日、外国メディアは、人工知能企業Jina AIがこのほど、第2世代のテキスト埋め込みモデル...

チームメイトが機械の場合: CISO が AI について尋ねるべき 8 つの質問

AI は、私たちが行うほぼすべての方法を変えています。私たちが行くところすべてで、かつては人間が行っ...

通信産業の発展を後押しし、2つの主要ドローンの価値が強調される

最近、わが国の科学技術分野は新たな躍進を遂げました。ドローンによる「橋渡し」の力を借りて、量子ネット...

...

中国のAIハイテクが2018CESを制覇、Zhuner翻訳機が世界の家電「オスカー」を驚かせる

2018 CES(国際コンシューマー・エレクトロニクス・ショー)が1月9日から12日まで米国ラスベガ...

人工知能の大学が雨後の筍のように次々と誕生しています。そこでは何を教えるのでしょうか?どのように教えるか?

[[240090]] 2018年グローバル人工知能製品アプリケーション博覧会で、来場者がテーマポス...

テンセントが独自開発したHunyuanモデルが正式にリリースされ、Tencent Cloudを通じて一般に公開されました。

国産大型モデルはパラメータ優先から実用性優先へとシフトし、長期化期に入っている。 9月7日、2023...

ハーバード史上最短の在職期間! 53歳の女性校長、博士論文の盗作疑惑で辞職

ハーバード大学の第30代学長が正式に辞任を発表しました! 53歳のクローディン・ゲイ氏は昨年7月に就...

...

人工知能の時代でも様々な外国語を学ぶことは必要なのでしょうか?

[[254738]]文部科学省が公表した2017年度版の高等学校総合学習の計画と14項目の学習指導...

世界はとても広い。AIがあなたと一緒に世界を旅します

[オリジナル記事は51CTO.comより] 私の周りには、「世界は広いから、外に出て旅をしたい」と言...

その光景は衝撃的だ! 「世界最強」のロボット9台が国連AIロボット会議のステージに登場

今日はスカイネットが来ます!ロボットたちはジュネーブで初めての記者会見を開催したばかりだ。 9 台の...