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

ブログ    

推薦する

中国の新世代人工知能レポートが発表:中国はAI論文数で世界一

[[266390]] 5月24日、浦江イノベーションフォーラムで「中国の新世代人工知能発展報告書20...

8 クイーン問題を解く C# アルゴリズムの簡単な分析

8つのクイーンの問題の説明: 8 クイーン問題は古くからある有名な問題であり、バックトラッキング ア...

Yixue EducationのCui Wei氏:将来、教育分野での授業はロボットに置き換えられるでしょう

[原文は51CTO.comより] 教育業界と人工知能が出会うと、どんな火花が散るでしょうか?国内外の...

将来、音声認識はどのような商業シナリオに適用される可能性がありますか?

Companies and Markets の評価レポートでは、世界の音声認識市場は今後さらに多様...

2020年はAI関連ビジネスの発展にとって重要な年となる

今日、人々は仮想世界で触れることができるほぼすべてのものを作成し、さらに構築してきました。人工知能は...

アヴネットは18年連続で「トップ10ベスト国際ブランドディストリビューター」の称号を獲得しました。

[[284150]] 深圳でグローバル電子部品販売代理店優秀賞授賞式が開催されました。アヴネット中...

ルールベースのAIと機械学習の主な違いは、さまざまな業界の企業が検討し、実装している点です。

さまざまな業界の企業が、ビッグデータからロボット工学まで、ビジネスプロセスの自動化、顧客体験の向上、...

...

Appleが自社チップ用のオープンソースフレームワークMLXを開発、Llama 7Bを実装しM2 Ultraで動作

2020年11月、Appleは速度と強力な機能の点で驚異的なM1チップを発売しました。 2022年に...

...

ファーウェイの天才少年Zhihuiは、かわいいロボットを自作し、5時間でオープンソース化し、GitHubで317個のスターを獲得した。

前回ブドウに縫い目をつけた「完全自社開発」のアイアンマンロボットアーム「ダミー」を覚えていますか? ...

AI医用画像の春が再び到来?

概要: AI医用画像診断市場は急速な成長期を迎えつつあり、医師の負担を軽減しながら医療の質の向上も期...

16歳の高校生が13,000行以上のコードでC++機械学習ライブラリをゼロから作成した

コンピューターが大好きなティーンエイジャーは、16歳にしてすでに、広東語プログラミング言語の開発、K...

人工知能の実装によるIoTセキュリティの最適化

モノのインターネット (IoT) は市場で急速に成長しており、ビジネス戦略は変化し、IoT デバイス...