用coffee和socket.io实现的01背包算法

开发 前端 算法
程序猿太苦逼了,真的,时间久了,真没有搬砖的成就感高,好歹人家能盖栋楼(身材也能练得不错),咱们指不定哪天来个熊孩子把硬盘格了就啥也没了……

先说说我为什么写这些吧

  • 当程序猿太苦逼了,真的,时间久了,真没有搬砖的成就感高,好歹人家能盖栋楼(身材也能练得不错),咱们指不定哪天来个熊孩子把硬盘格了就啥也没了。
  • 这学期明显没把心放在前端上……汗啊,将来还想吃着口饭呢,但是这学期绝对没休息,只是忙了很多可能很多人认为无聊的事。
  • 因为这学期无聊事太多了,耽误了很多,也让导师很失望,自己也很自卑,整理一下调调心态。
  • 因为很多是针对作业的奇葩想法,所以,作业嘛,不糊弄就不是作业了,还希望大家多多批评。
  • 兴许因为哪篇文章能解决工作呢。
  • 我想试试Markdown。

靓照一张

多谢bs,前端省老事儿了

进入正题

后台实现部分:

  1. io = require “socket.io”  
  2. http = require “http”  
  3. fs = require “fs”  
  4. express = require “express”  
  5. mime = require “mime”  
  6. app = express()  
  7. server = http.createServer app  
  8. server.listen 8080  
  9. console.log “Listening 8080” 

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

  1. path = "#{__dirname}/console.html" 
  2. res.writeHead 200,"Content-Type":mime.lookup(path)  
  3. res.end fs.readFileSync path 

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

  1. path = "#{__dirname}/jquery.min.js" 
  2. res.writeHead 200,"Content-Type":mime.lookup(path)  
  3. res.end fs.readFileSync path 

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

  1. path = "#{__dirname}/bootstrap.min.js" 
  2. res.writeHead 200,"Content-Type":mime.lookup(path)  
  3. res.end fs.readFileSync path 

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

  1. path = "#{__dirname}/bootstrap.min.css" 
  2. res.writeHead 200,"Content-Type":mime.lookup(path)  
  3. res.end fs.readFileSync path 

getCurrentTime = ->
d = new Date()
return “#{d.getFullYear()}-#{d.getMonth()+1}-#{d.getDate()} #{d.getHours()}:#{d.getMinutes()}:#{d.getSeconds()}”

class dynamicPack

  1. pack:(data)->  
  2.     c=[]  
  3.     i=0 
  4.     j=0 
  5.     while i<data.m+1 
  6.         c[i]=[]  
  7.         c[i][0]=0 
  8.         i++  
  9.     while j<data.n+1 
  10.         c[0][j]=0 
  11.         j++  
  12.     i=1 
  13.     while i<data.m+1 
  14.         j=1 
  15.         while j<data.n+1 
  16.             if data.w[i-1]<=j  
  17.                 if c[i-1][j]<c[i-1][j-data.w[i-1]]+data.v[i-1]  
  18.                     c[i][j]=c[i-1][j-data.w[i-1]]+data.v[i-1]  
  19.                 else 
  20.                     c[i][j]=c[i-1][j]  
  21.             else c[i][j] = c[i-1][j]  
  22.             j++  
  23.         i++  
  24.     return c;  
  25. print:(c,data)->  
  26.     x = []  
  27.     i = data.m  
  28.     n = data.n  
  29.     str = "" 
  30.     #console.log c[i][m]  
  31.     while i>0 
  32.         if  c[i][n] > c[i-1][n]  
  33.             x[i-1] = 1 
  34.             n -= data.w[i-1]  
  35.         else x[i-1] = 0 
  36.         i--  
  37.     i= 0 
  38.     count = 0 
  39.     while i<data.m  
  40.         count += x[i]*data.v[i]  
  41.         str += (i+1)+"," if x[i]!=0 
  42.         i++               
  43.     return str+"共计价值#{count}" 

class knapPack

  1. pack : (data)->  
  2.     @v = data.v  
  3.     @w = data.w  
  4.     @m = data.m  
  5.     @n = data.n  
  6.     @cw = 0 
  7.     @cv = 0 
  8.     @put = []  
  9.     @bestp = 0 
  10.    
  11.     temp_order = 0;  
  12.     temp = 0 
  13.     perp = []  
  14.     i=0 
  15.     while i<@m 
  16.         perp[i] = @v[i]/@w[i]   
  17.         @put[i] = 0;  
  18.         i++  
  19.     console.log perp  
  20.     i=0 
  21.     while i<@m 
  22.         j=i+1 
  23.         while j<@m 
  24.             if perp[i]<perp[j]  
  25.                 temp = @v[i]  
  26.                 @v[i] = @v[j]  
  27.                 @v[j] = temp  
  28.    
  29.                 temp = @w[i]  
  30.                 @w[i] = @w[j]  
  31.                 @w[j] = temp  
  32.             j++  
  33.         i++  
  34. backtrack : (i)->  
  35.     console.log i  
  36.     @bound i  
  37.     if i>@m 
  38.         @bestp = @cv 
  39.         return 
  40.     if @cw+@w[i]<=@n 
  41.         @cw+=@w[i]  
  42.         @cv+=@v[i]  
  43.         @put[i]=1 
  44.         @backtrack(i+1)  
  45.         @cw-=@w[i]  
  46.         @cv-=@v[i]  
  47.     if @bound(i+1)>@bestp 
  48.         @backtrack(i+1)  
  49. bound :(i)->  
  50.     leftw = @n - @cw 
  51.     b = @cv 
  52.     while i<=@m and @w[i]<=leftw  
  53.         leftw -= @w[i]  
  54.         b += @v[i]  
  55.         i++  
  56.     b+=@v[i]/@w[i]*leftw if i<@m 
  57.     return b  
  58. print :(data)->  
  59.     @pack(data)  
  60.     console.log @w 
  61.     console.log @v 
  62.     @backtrack(0)  
  63.     console.log @put 
  64.     return @bestp 

dask = (msg)->

  1. answer = "" 
  2. data = JSON.parse msg  
  3. console.log data  
  4.    
  5. d = new dynamicPack()  
  6. console.log d.pack(data)  
  7. answer += "动态规划,选择物品"+d.print d.pack(data),data  
  8. return answer 

kask = (msg)->

  1. answer = "" 
  2. data = JSON.parse msg  
  3. console.log data  
  4.    
  5. k = new knapPack()  
  6. answer += "分支限界,***解"+k.print data  
  7. return answer 

io.listen(server).on “connection”,(socket)->

  1. socket.on "msg",(msg)->  
  2.     ##console.log msg  
  3.     socket.emit "msg",{time:getCurrentTime(),text:"calculating..."}  
  4.     socket.emit "msg",{time:getCurrentTime(),text:dask(msg)}  
  5.     socket.emit "msg",{time:getCurrentTime(),text:kask(msg)}  
  6.     ##socket.broadcast.emit "msg",data  
  7.    
  8. console.log "#{getCurrentTime()}:Connected" 

前端实现部分:

  • 输入示例:{"n":10,"m":3,"w":[3,4,5],"v":[4,5,6]}其中n为背包容量,m为物品数量

原文链接:http://my.oschina.net/gongbaodd/blog/293129

责任编辑:林师授 来源: GongBaoDD的博客
相关推荐

2017-09-05 15:30:00

JavascriptSocket.ioNode.js

2019-07-26 14:40:58

Vue.jsSocket.IO前端

2015-07-15 12:53:05

Node.jsSocket.io远程控制

2013-04-09 12:18:45

socket.ioC服务器

2022-06-13 07:33:57

socketReact组件

2012-08-01 14:16:27

IBMdW

2013-10-23 17:17:31

Node.jsdoT

2024-06-07 07:54:00

Solana框架区块链

2016-11-22 13:25:28

Apache Spar大数据

2012-01-09 13:24:27

2011-12-13 12:32:54

JavaNIO

2021-01-19 05:46:45

背包数组容量

2011-09-06 09:48:41

MTK平台

2023-12-13 09:45:49

模型程序

2021-06-21 11:11:29

LinuxIO磁盘IO

2019-02-18 09:00:00

TextRank算法自然语言处理Python

2021-01-15 13:54:04

Portainer.iDocker运维

2021-01-15 13:37:43

Portainer.iDocker运维

2017-10-23 10:13:18

IO底层虚拟

2023-06-26 07:31:44

属性物品背包
点赞
收藏

51CTO技术栈公众号