之前一直用c++写程序  所以考虑程序一般都比较容易往数据结构的方向想 而自己设计数据结构往往要费很大事  昨天看了一下python  发现脚本语言 真是厉害    用来进行模拟运算确实不错  可以先想个解决问题的思路 用python 先测试一下  如果可行 如果为了运行效率 使用c++改写  确实是一个不错的选择

昨天在看操作系统的时候看到这么一个题目  

这个题目是操纵系统中典型的为多个进程分配资源 最后达到安全状态的题目,可以理解为找一条安全路径

如果使用c++来写 那就用深度优先搜索算法  然后就要慢慢思考解决办法了 , 为了练习刚刚学习的python 我使用python的 numpy来解决这个问题

因为还没有学怎么写函数  所以写成四个循环了 不过算法复杂度应该差不多, 准备再学一段时间后 优化一下

  1. import numpy
  2. a=numpy.array(([1,1,2,4],
  3. [0,1,2,2],
  4. [1,1,1,0],
  5. [1,1,1,1]))
  6. b=numpy.array(([1,2,3,6],
  7. [1,1,2,2],
  8. [1,2,1,1],
  9. [1,1,2,3]))
  10. c=numpy.array([0,1,0,1])
  11.  
  12. d=b-a
  13.  
  14. for i in range(0,4):
  15. j = 0
  16. for j in range(0,4):
  17. if d[i][j]>c[j]:
  18. break
  19. # print 'e'
  20. # if j==3 and d[i][j]<=c[j]:
  21. else:
  22. e=numpy.array([0,0,0,0])
  23. f=c
  24. e[i]=1
  25. f=f+d[i]
  26. d[i]=numpy.array((0,0,0,0))
  27.  
  28. for k in range(0,4):
  29. if e[k]==1:
  30. continue
  31. n = 0
  32. for n in range(0,4):
  33. if d[k][n]>f[j]:
  34. break;
  35. # if n==3 and d[k][n]<=f[j]:
  36. else:
  37.  
  38. e[k]=1
  39. f=f+d[k]
  40. d[k]=numpy.array((0,0,0,0))
  41. for m in range(0,4):
  42. if e[m]==1:continue
  43. p = 0
  44. for p in range(0,4):
  45. if d[m][p]>f[p]:break
  46. # print p
  47. # print m
  48. # if p==3 and d[m][p]<=f[p]:
  49. else:
  50.  
  51. e[m]=1
  52. f=f+d[m]
  53. d[m]=numpy.array((0,0,0,0))
  54. for q in range(0,4):
  55. if e[q]==1:continue
  56. r = 0
  57. for r in range(0,4):
  58. if d[q][r]>f[r]:break
  59. # if r==3 and d[q][r]<=f[r]:
  60. else:
  61. print i+1
  62. print k+1
  63. print m+1
  64. print q+1
  65. # print 'heihei'
  66. exit()
  67.  
  68. d[m]=b[m]-a[m]
  69. e[m]=0
  70. d[k]=b[k]-a[k]
  71. e[k]=0
  72. d[i]=b[i]-a[i]
  73. e[i]=0

python学习应用笔记(一)的更多相关文章

  1. Python学习基础笔记(全)

    换博客了,还是csdn好一些. Python学习基础笔记 1.Python学习-linux下Python3的安装 2.Python学习-数据类型.运算符.条件语句 3.Python学习-循环语句 4. ...

  2. [python学习手册-笔记]001.python前言

    001.python前言 ❝ 本系列文章是我个人学习<python学习手册(第五版)>的学习笔记,其中大部分内容为该书的总结和个人理解,小部分内容为相关知识点的扩展. 非商业用途转载请注明 ...

  3. [python学习手册-笔记]002.python核心数据类型

    python核心数据类型 ❝ 本系列文章是我个人学习<python学习手册(第五版)>的学习笔记,其中大部分内容为该书的总结和个人理解,小部分内容为相关知识点的扩展. 非商业用途转载请注明 ...

  4. [python学习手册-笔记]003.数值类型

    003.数值类型 ❝ 本系列文章是我个人学习<python学习手册(第五版)>的学习笔记,其中大部分内容为该书的总结和个人理解,小部分内容为相关知识点的扩展. 非商业用途转载请注明作者和出 ...

  5. [python学习手册-笔记]004.动态类型

    004.动态类型 ❝ 本系列文章是我个人学习<python学习手册(第五版)>的学习笔记,其中大部分内容为该书的总结和个人理解,小部分内容为相关知识点的扩展. 非商业用途转载请注明作者和出 ...

  6. python学习第一次笔记

    python第一次学习记录 python是什么编程语言 变成语言主要从以下几个角度进行分类,编译型和解释型.静态语言和动态语言.强类型定义语言和弱类型定义语言. 1.1编译型与解释性 编译型:一次性将 ...

  7. Python 学习开发笔记之IO操作

    文件或者目录的路径操作 获取当前工作目录 import os import sys cwd = os.getcwd() 路径的拼接 os.path.join(path,"dir") ...

  8. python学习总结笔记(一)

    1.raw_input("请输入:")提示录入信息,读取录入的字符串返回你录入的字符串2.os.environ 获取所有系统的环境变量,返回一个字典.3.str与repr区别str ...

  9. python 学习常见问题笔记

    1.for...if...构建List segs = [v for v in segs if not str(v).isdigit()]#去数字 https://www.cnblogs.com/eni ...

随机推荐

  1. transform的使用

    *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...

  2. x86_64平台编译链接汇编程序

    assemble: nasm -f elf32 sample.asm -l sample.lst link: ld -m elf_i386 -o test sample.o io.o

  3. The Ninth Hunan Collegiate Programming Contest (2013) Problem A

    Problem A Almost Palindrome Given a line of text, find the longest almost-palindrome substring. A st ...

  4. SDUT 3344 数据结构实验之二叉树五:层序遍历

    数据结构实验之二叉树五:层序遍历 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 已知一个按 ...

  5. 全局变量 urllib模块 json模块

    1.vars()  查看一个.py文件中的全局变量 print(vars()) #重点 __name__': '__main__ '__file__': 'C:/Users/lenovo/Pychar ...

  6. Response.Write页面跳转

    一.<a>标签 <a href=”test.aspx”></a> 这是最常见的一种转向方法 二.HyperLink控件   1. Asp.net 服务器端控件 属性 ...

  7. RequireJS首次加载偶尔失败

    现象:第一次加载JS文件,首次加载偶尔失败: 原因:require(['jquery', 'operamasks', 'zTree', 'jQueryCookie'],中前后引用同步加载: 解决方式: ...

  8. Java 编译报错:illegal character

    1.检查编译版本:1.5还是1.6 2.重新引用一下Jar包

  9. 解决Android sdk更新不能下载或下载内容过慢

    Android Android SDK 配置步骤 启动 Android SDK Manager ,打开主界面,依次选择「Tools」.「Options...」,弹出『Android SDK Manag ...

  10. 【转载】linux中互斥尽量用mutex,不用semaphore

    DEFINE_MUTEX是来自include/linux/mutex.h中的一个宏,用它可以定义一把互斥锁,在Linux内核中,其实是在2005年底才建立比较系统.完善的互斥锁机制,在那年冬天,来自R ...