操作系统实验进程调度模拟

2023-11-17

操作系统实验

实验一

实验1:基于优先数的时间片轮转调度算法调度处理模拟程序设计

一、实验目的

1.对进程调度的工作做进一步的理解。
2.了解进程调度的任务。
3.通过编程掌握基于优先数的时间片轮转调度算法具体实现过程。

二、实验内容及实验要求

1.设计一个程序模拟实现基于优先数的时间片轮转调度算法调度处理。
 2.每个进程用一个进程控制块PCB来代表,建议进程控制块的结构如下所示:
       进程名	到达时间	要求运行时间	优先数	已运行时间	周转时间	指针
     1)进程名:作为进程的标识。
     2)到达时间:进程进入系统时间。
     3)要求运行时间:假设进程需要运行的单位时间数。
     4)已运行时间:假设进程已经运行的单位时间数,初值为0。
     5)状态:可假设有三种状态:未进入状态、就绪状态和结束状态。进程的初始状态都为未进入状态,到达时间-当前时间数时=0进程从未进入状态进入就绪状态;当要求运行时间-已运行时间=0时进程进入结束状态。
     6)优先数:范围0-100,优先数越小,级别越高。
     7)周转时间:进程从到达开始到结束运行所经历时间数。
     8)指针:进程按顺序排成链表(不同队列进程排列顺序不一样),用指针指出下一个进程的进程控制块首地址,最后一个进程中的指针指出第一个进程的进程控制块首地址。
3.程序开始运行时输入多个进程信息,用于实现对进程控制块的初始化。测试输入数据表1所示:
 表1 输入数据表
进程名       A	 B	 C	 D	 E	 F
到达时间  	0	 0	 1	 1	 3   5
要求运行时间	4	 5	 5   4	 4	 4
优先数	    3	 2	 0	 10	 5	 2

 4.程序在没有开始运行前,全部进程所处的状态都处于未进入状态。
 5.程序当中应该组织三个队列:未进入队列、就绪队列和结束队列。
 6.就绪队列中的就绪进程按优先数由小到大排列,优先级最高的进程,获得   被调度的资格。当某一进程运行完一个时间片后,其优先级应下调(如优先数加3)。
 7.启动自动调度,系统时间单位开始自动计时,系统开始自动调度执行。程序显示每个时间单位的各个队列的 PCB信息。
 8.最后输出每个进程的周转时间。

三、实验时间

4个学时

五、实验报告

1.程序中使用的数据结构及符号说明。
2.主要算法的流程图或详细说明。
3.程序运行时的初值和运行结果截图。
4.程序清单并附上注释
5.实验小结

RR.java

package 时间片轮盘调度算法模拟;

import java.util.LinkedList;
import java.util.Scanner;

/**
 *
 * @author wangh
 */
public class RR {

    //进程控制块PCB
    class PCB {

        String name;//进程名
        int startTime;//到达时间
        int needTime;//要求运行时间
        int priority;//优先数
        int runTime;//已运行时间
        int trunTime;//周转时间
    }
    int n;//进程数
    int t;//时间片大小
    int count = 0;//当前时间片
    int acount = 0;//当前时间
    Scanner scanner = new Scanner(System.in);

    //未进入队列输入
    void noreinput(LinkedList<PCB> noreList) {
        for (int i = 0; i < n; i++) {
            PCB a = new PCB();
            System.out.print("进程名:");
            a.name = scanner.next();
            System.out.print("到达时间:");
            a.startTime = scanner.nextInt();
            System.out.print("要求运行时间:");
            a.needTime = scanner.nextInt();
            System.out.print("优先数:");
            a.priority = scanner.nextInt();
            noreList.addLast(a);
            System.out.println();
        }
    }

    //,输入从aList到bList
    void readyInput(LinkedList<PCB> aList, LinkedList<PCB> bList, int u) {
        switch (u) {
            //未进入队列->就绪队列
            case 0: {
                if (!aList.isEmpty()) {
                    for (int i = 0; i < aList.size(); i++) {
                        if (aList.get(0).startTime <= acount) {
                            PCB b = new PCB();
                            b.name = aList.get(0).name;
                            b.needTime = aList.get(0).needTime;
                            b.priority = aList.get(0).priority;
                            b.runTime = 0;
                            bList.addLast(b);
                            aList.remove(0);
                            i--;
                        }
                    }
                }
            }
            break;
            //就绪队列->运行队列
            case 1: {
                if (!aList.isEmpty()) {
                    PCB b = new PCB();
                    b.name = aList.get(0).name;
                    b.needTime = aList.get(0).needTime;
                    b.priority = aList.get(0).priority;
                    b.runTime = aList.get(0).runTime;
                    bList.addLast(b);
                    aList.remove(0);
                }
            }
            break;
            //运行队列->就绪队列
            case 2: {
                if (!aList.isEmpty()) {
                    PCB b = new PCB();
                    b.name = aList.get(0).name;
                    b.needTime = aList.get(0).needTime;
                    b.priority = aList.get(0).priority + 3;
                    b.runTime = aList.get(0).runTime + t;
                    bList.addLast(b);
                    aList.remove(0);
                }
            }
            break;
            //运行队列->结束队列
            case 3: {
                if (!aList.isEmpty()) {
                    PCB b = new PCB();
                    b.name = aList.get(0).name;
                    b.needTime = aList.get(0).needTime;
                    b.runTime = aList.get(0).runTime + t;
                    b.trunTime = acount - aList.get(0).startTime;
                    bList.addLast(b);
                    aList.remove(0);
                }
            }
            break;
            default:
                break;
        }
    }

    //未进入队列排序
    void sorted(LinkedList<PCB> list) {
        PCB temp;
        for (int i = 0; i < n - 1; i++) {
            for (int j = 0; j < n - 1 - i; j++) {
                //按到达时间排序
                if (list.get(j).startTime > list.get(j + 1).startTime) {
                    temp = list.get(j);
                    list.set(j, list.get(j + 1));
                    list.set(j + 1, temp);
                }//按优先数排序,数字小优先数高
                else if (list.get(j).startTime == list.get(j + 1).startTime && list.get(j).priority > list.get(j + 1).priority) {
                    temp = list.get(j);
                    list.set(j, list.get(j + 1));
                    list.set(j + 1, temp);
                }
            }
        }
    }

    //优先数排序
    void sort(LinkedList<PCB> list) {
        if (list.size() >= 2) {
            PCB temp;
            for (int i = 0; i < list.size() - 1; i++) {
                for (int j = 0; j < list.size() - 1 - i; j++) {
                    if (list.get(j).priority > list.get(j + 1).priority) {
                        temp = list.get(j);
                        list.set(j, list.get(j + 1));
                        list.set(j + 1, temp);
                    }
                }
            }
        }
    }

    void sorti(LinkedList<PCB> list) {
        PCB temp;
        for (int i = 0; i < list.size() - 1; i++) {
            for (int j = 0; j < list.size() - 1 - i; j++) {
                if (list.get(j).trunTime < list.get(j + 1).trunTime) {
                    temp = list.get(j);
                    list.set(j, list.get(j + 1));
                    list.set(j + 1, temp);
                }
            }
        }
    }

    void output(LinkedList<PCB> runList, LinkedList<PCB> readyList, LinkedList<PCB> noreList, LinkedList<PCB> endList) {
        //运行队列
        System.out.println("--------------运行队列--------------");
        System.out.printf("(%7s,%7s,%7s,%7s)", "进程名", "要求运行时间", "优先数", "已运行时间");
        System.out.println();
        if (runList.isEmpty()) {
            System.out.println("          队列为空");
        } else {
            for (int i = 0; i < runList.size(); i++) {
                System.out.printf("%10s", runList.get(i).name);
                System.out.printf("%10d", runList.get(i).needTime);
                System.out.printf("%10d", runList.get(i).priority);
                System.out.printf("%10d", runList.get(i).runTime);
                System.out.println();
            }
        }
        //就绪队列
        System.out.println("--------------就绪队列--------------");
        System.out.printf("(%7s,%7s,%7s,%7s)", "进程名", "要求运行时间", "优先数", "已运行时间");
        System.out.println();
        if (readyList.isEmpty()) {
            System.out.println("          队列为空");
        } else {
            for (int i = 0; i < readyList.size(); i++) {
                System.out.printf("%10s", readyList.get(i).name);
                System.out.printf("%10d", readyList.get(i).needTime);
                System.out.printf("%10d", readyList.get(i).priority);
                System.out.printf("%10d", readyList.get(i).runTime);
                System.out.println();
            }
        }
        //未进入队列
        System.out.println("--------------未进入队列-------------");
        System.out.printf("(%7s,%7s,%7s,%7s)", "进程名", "到达时间", "要求运行时间", "优先数");
        System.out.println();
        if (noreList.isEmpty()) {
            System.out.println("          队列为空");
        } else {
            for (int i = 0; i < noreList.size(); i++) {
                System.out.printf("%10s", noreList.get(i).name);
                System.out.printf("%10s", noreList.get(i).startTime);
                System.out.printf("%10s", noreList.get(i).needTime);
                System.out.printf("%10s", noreList.get(i).priority);
                System.out.println();
            }
        }
        //结束队列
        System.out.println("--------------结束队列--------------");
        System.out.printf("(%7s,%7s,%7s,%7s)", "进程名", "要求运行时间", "已运行时间", "周转时间");
        System.out.println();
        if (endList.isEmpty()) {
            System.out.println("          队列为空");
        } else {
            for (int i = 0; i < endList.size(); i++) {
                System.out.printf("%10s", endList.get(i).name);
                System.out.printf("%10d", endList.get(i).needTime);
                System.out.printf("%10d", endList.get(i).runTime);
                System.out.printf("%10d", endList.get(i).trunTime);
                System.out.println();
            }
        }
    }
}

test.java

package 时间片轮盘调度算法模拟;

import java.util.LinkedList;
import java.util.Scanner;

/**
 *
 * @author wangh
 */
public class test {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        RR r = new RR();
        //未进入队列
        LinkedList<RR.PCB> noreList = new LinkedList<>();
        noreList.clear();
        //就绪队列
        LinkedList<RR.PCB> readyList = new LinkedList<>();
        readyList.clear();
        //运行队列
        LinkedList<RR.PCB> runList = new LinkedList<>();
        runList.clear();
        //结束队列
        LinkedList<RR.PCB> endList = new LinkedList<>();
        endList.clear();
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入时间片大小:");
        r.t = scanner.nextInt();
        System.out.print("请输入进程数:");
        r.n = scanner.nextInt();
        r.noreinput(noreList);
        r.sorted(noreList);
        System.out.println("未开始调度时");
        r.output(runList, readyList, noreList, endList);
        System.out.println("开始调度时");
        do {
            r.readyInput(noreList, readyList, 0);
            r.sort(readyList);
            r.readyInput(readyList, runList, 1);
            r.count++;
            r.acount = r.acount + r.t;
            System.out.println("第" + r.count + "个时间片时");
            r.output(runList, readyList, noreList, endList);
            if (runList.get(0).runTime <= runList.get(0).needTime - r.t) {
                r.readyInput(runList, endList, 3);
            } else {
                r.readyInput(runList, readyList, 2);
                r.sort(readyList);
            }
        } while (endList.size()!=r.n);
        r.readyInput(runList, endList, 3);
        r.sorti(endList);
        System.out.println("所有进程运行完毕,显示各个进程的周转时间:");
        System.out.println("(按周转时间从大到小排列)");
        System.out.printf("(%7s,%7s)", "进程名","周转时间");
        System.out.println();
            for (int i = 0; i < endList.size(); i++) {
                System.out.printf("%10s", endList.get(i).name);
                System.out.printf("%10d", endList.get(i).trunTime);
                System.out.println();
            }
    }

}

六、实验报告

 计算机与软件工程学院
 上机实验报告

(  2021 - 2022学年 第1学期 )


课程名称	操作系统
课程代码	
任课教师	
学生姓名	
学号		专业	
实验成绩	



实验名称	基于优先数的时间片轮转调度算法调度处理模拟程序设计	实验地点	
实验类型	设计	实验学时	4	实验日期	2021/11/22
★【注意】文档各种格式已经设置好并不得更改,填入内容即可

一、实验目的

  1.对进程调度的工作做进一步的理解。
  2.了解进程调度的任务。
  3.通过编程掌握基于优先数的时间片轮转调度算法具体实现过程。

二、实验内容

 1.实验任务
设计一个程序模拟实现基于优先数的时间片轮转调度算法调度处理
2.算法与程序设计
1)数据结构说明
定义一个PCB类,模拟进程控制块(PCB),实例化一个PCB代表一个进程
利用Java LinkedList<E>泛型类,定义进程调度模拟中的各个链表队列,并储存其PCB
每个PCB具有属性
    class PCB {
    String name;//进程名
    int startTime;//到达时间
    int needTime;//要求运行时间
    int priority;//优先数
    int runTime;//已运行时间
    int trunTime;//周转时间
    }
用于表示储存的四个状态队列分别是
    LinkedListPCB> noreList    //未进入队列
    LinkedList<PCB> readyList  //就绪队列
    LinkedList<PCB> runList    //运行队列
    LinkedList<PCB> endList    //结束队列
设置int t控制时间片大小
2)数据输入(输入哪些数据、个数、类型、来源、输入方式)
未进入队列输入为键入,使用for循环输入{进程名,到达时间,要求运行时间,优先数},实现对任意个进程的调度模拟
实验模拟数据为:
进程名	    A	B	C	D	E	F
到达时间	    0	0	1	1	3	5
要求运行时间	4	5	5	4	4	4
优先数	    3	2	0	10	5	2

就绪队列,运行队列,结束队列间的输入输出通过方法void readyInput(LinkedList<PCB> aList, LinkedList<PCB> bList, int u)实现
3)数据处理(正确绘制流程图,说明数据处理步骤)

流程图
4)数据输出(程序运行结果截图。图幅大小适当,能看清楚的情况下尽量小)
数据输入截图
在这里插入图片描述

未开始调度截图
在这里插入图片描述

调度过程中
在这里插入图片描述

调度完毕
在这里插入图片描述

3.实验小结

通过这个实验,使我对Java(LinkedList)的一些方法的认识更为清晰,进程在状态队列间移动时,使用了remove()删除某个元素后,因为删除元素后,后面的元素都往前移动了一位,而我的索引+1,导致出现越界。
同时使我对进程调度的认识更加清晰,了解到时间片轮转调度算法的具体实现过程,在完成实验的同时,编程能力也会有所提高。

三、实验环境

1.操作系统:WINDOWS 7及以上 
2.开发工具:Netbeans IDE 8.2
3.实验设备:PC
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

操作系统实验进程调度模拟 的相关文章

  • 如何将未知列数的 ResultSet 映射到 List 并将其显示在 HTML 表中?

    我使用 Netbeans GlassFish 和 JavaDB 创建了一个数据库应用程序 现在我的控制器 Servlet 代码执行一些动态 SQL 查询并返回结果集 或者我可以更改 toString 现在 如何以表格格式显示返回的结果集 我
  • 使用 Guice 注入类集合

    我正在尝试用 Google Guice 2 0 注入东西 我有以下结构 FooAction implements Action BarAction implements Action 然后我有一个带有以下构造函数的 ActionLibrar
  • Java 读取大文本文件时出现 OutOfMemoryError

    我是 Java 新手 正在读取非常大的文件 需要一些帮助来理解问题并解决它 我们有一些遗留代码 必须对其进行优化才能正常运行 文件大小仅在 10mb 到 10gb 之间变化 只有当文件开始大小超过 800mb 时才会出现启动问题 Input
  • 在命令行java中突出显示文本[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一项任务是重新创建 unix cal 程序 除了一部分之外 相当简单 今天 它突出显示了该数字 我不知道该怎么做 关于如何在 Ja
  • 项目缺少所需的注释处理库

    我的 Eclipse IDE 突然在问题视图中显示 xxxx 项目缺少所需的注释处理库 xxxx M2 REPO 中的一些旧 jar 我用谷歌搜索 没有找到任何答案 为什么我的项目使用旧的 jar 以及错误来自哪里 To remove th
  • 尝试获取屏幕上绘制的每个随机圆圈的 x、y 坐标

    您好 我正在制作一款游戏 该游戏将在屏幕上创建随机圆圈 随机创建的圆圈的值为红色或绿色 我的问题是 我希望不仅能够确定用户何时单击其中一个圆圈 而且还能够确定他们最终单击的圆圈 红色或绿色 下面是我的代码 我的主要问题是试图找到将要绘制的圆
  • 如何为小程序提供对文件系统写入的访问权限

    我在设置小程序的策略文件时遇到问题 我是第一次这样做 不知道如何在java中设置小程序的策略文件 实际上我想授予小程序在文件系统上写入的权限 为此我必须向小程序授予文件权限 所以我创建了一个名为 java policy 的文件 并将以下代码
  • java中的单链表和双向链表?

    在java中 哪个集合接口可以有效地实现单链表和双向链表 请问代码示例吗 毫不奇怪 实现双向链表的正确接口是 LinkedList 看Java文档 http docs oracle com javase 8 docs api java ut
  • Kafka Java Consumer 已关闭

    我刚刚开始使用卡夫卡 我面临着消费者的一个小问题 我用Java写了一个消费者 我收到此异常 IllegalStateException 此消费者已关闭 我在以下行中遇到异常 ConsumerRecords
  • 关于Java泛型的一些问题

    假设我有以下接口和实现类 interface Foo
  • Java - JPanel 内有边距和 JTextArea

    我想创建这样的东西 主面板有其边距 x 并且 TextArea 位于该面板的中心 几乎填满了面板 底部是另一个具有自定义尺寸 高度 y 的面板 可以使用某些快捷方式将其切换为可见和不可见 底部面板有 FlowLayout 和几个元素 问题是
  • 将现有 eclipse 项目导出到 war 文件时出现“模块名称无效”

    我正在尝试将现有 Eclipse 项目导出到 war 文件 但无论我在 WAR Export 对话框页面中输入什么 系统总是返回 模块名称无效 我不知道如何解决这个问题 谢谢您的帮助 我有同样的问题 我修复了它 请按照以下步骤操作 您可以创
  • 查找数组中的组合

    我在java中有一个像这样的二维数组 transmission communication tv television approach memorycode methodact 我需要获得所有组合 例如 transmission appr
  • MongoDB java 驱动程序 3.0 在身份验证时无法捕获异常

    我超级卡住o 0 在尝试通过 Java 驱动程序进行身份验证时 存在捕获异常的问题 正如你可能会看到的Throwable类不工作 private MongoClient mongoClient private MongoDatabase m
  • 使用 HTTPServletRequestWrapper 包装请求参数

    我有一个可以验证 授权 REST 调用的过滤器 该过滤器需要访问请求参数 因此我为此编写了一个自定义 HTTPServletRequestWrapper import java util Collections import java ut
  • Java8:流映射同一流中的两个属性

    我有课Model带有以下签名 class Model private String stringA private String stringB public Model String stringA String stringB this
  • CXF:通过 SOAP 发送对象时如何排除某些属性?

    我使用 Apache CXF 2 4 2 当我将数据库中的某个对象返回给用户时 我想排除一些属性 例如密码 我怎样才能做到这一点无需创建临时的班级 有这方面的注释吗 根据 tomasz nurkiewicz 评论我应该使用 XmlTrans
  • 如何清理 Runtime.exec() 中使用的用户输入?

    我需要通过命令行调用自定义脚本 这些脚本需要很少的参数并在 Linux 机器上调用 当前版本容易出现各种shell注入 如何清理用户给出的参数 参数包括登录名和路径 Unix 或 Windows 路径 用户应该能够输入任何可能的路径 该路径
  • 你能快速告诉我这个伪代码是否有意义吗?

    我相信我的代码现在是万无一失的 我现在将写出伪代码 但我确实有一个问题 为什么 DRJava 要求我返回 if 语句之外的内容 正如你所看到的 我为 ex 写了 return 1 只是因为它问了 但是它永远不会返回该值 谁可以给我解释一下这
  • 如何使用 Jest 从 ElasticSearch 获取索引列表

    我正在尝试使用 Jest 检索索引列表 但我只得到 Stats statistics new Stats Builder build result client execute statistics 如何从结果中检索索引列表 除了统计之外

随机推荐

  • springboot配置来连接多个mysql数据库

    1 在yml里配置多数据库 spring datasource app1 jdbc url jdbc mysql localhost 3306 data1 useUnicode true characterEncoding UTF 8 se
  • leetcode-143-重排链表

    题意描述 给定一个单链表 L 的头节点 head 单链表 L 表示为 L0 L1 Ln 1 Ln 请将其重新排列后变为 L0 Ln L1 Ln 1 L2 Ln 2 不能只是单纯的改变节点内部的值 而是需要实际的进行节点交换 解题思路 Ali
  • 【机器学习】为什么需要对数值型的特征做归一化(Normalization)?

    目录 为什么需要对数值型的特征做归一化 一 概念定义 二 标准化 归一化的原因 用途 2 1 原因 三 数据归一化的影响 四 常用的3种归一化方法 4 1 归一化公式 4 1 1 线性归一化 Min Max Scaling 即我们一般指的归
  • SpringBoot 整合Activiti(二)——流程审批完整示例

    前两天做了一个SpringBoot整合Activiti的完整示例 功能包括 退回 通过 节点条件 指定办理人 生成流程图 高亮显示已办节点 查询任务列表 办理人 等 下面先简单记录 含完整代码 十六上班后再详细补充 1 画流程图 高亮生成的
  • 《视觉slam十四讲》之第7讲-特征提取与匹配

    特征 特征为图像中具有代表性的区域 可以为角点 边缘和区块等 特征是图像信息的另一种数字表达形式 特征具有以下性质 可重复性 Repeatability 相同的 区域 可以在不同的图像中被找到 可区别性 Distinctiveness 不同
  • Linux运行shell脚本时报错"syntax error near unexpected token `$'\r''

    Linux运行shell脚本时 常常会发生syntax error near unexpected token r 或者syntax error unexpected end of file等 诸如此类的报错信息出现的原因是因为在编写脚本内
  • Shell编程中脱字符(^)的用法

    cat configs signatures tmp 将configs signatures tmp文件内容作为grep命令的输入 grep v v是grep排除的参数 将configs signatures tmp除去空行的内容作为sor
  • 蓝桥杯在哪下载准考证

    点击自己的头像 gt 我的大赛 gt 会出现如下 gt 点击Java软件开发 根据自己报的方向 gt 可以看到考试信息 gt 下载准考证即可 转载于 https blog 51cto com 13534640 2090954
  • Kafka消息阻塞

    转自 http jis117 iteye com blog 2279519 hi all 大家都很关心kafka消息阻塞的情况 感谢RoctetMQ给我们的教训 Kafka上线也有一段时间了 确实有出现过消息阻塞的情况 虽然不影响业务而且用
  • 判断逻辑关系的运算符 && 与,

    package com test basic chapter2 功能 判断逻辑关系的运算符 与 或 非 与 同为真即真 或 有真即真 非 public class LogicalOperators public static void ma
  • Java中map集合,你真的了解吗?

    在Java编程中 map集合是一个非常重要的数据结构 它可以存储键值对 并且可以根据键快速查找对应的值 今天 我们就来详细介绍一下Java中的map集合 首先 让我们来了解一下map集合的基本概念 在Java中 map集合是一个接口 它有多
  • padding的四个参数_Google Flutter 布局(二)-Padding、Align、Center详解

    1 1 简介 Padding在Flutter中用的也挺多的 作为一个基础的控件 功能非常单一 给子节点设置padding属性 写过其他端的都了解这个属性 就是设置内边距属性 内边距的空白区域 也是widget的一部分 Flutter中并没有
  • 深入理解Java——从入门到精通

    标题 深入理解Java 从入门到精通 Java是一门广泛应用于软件开发领域的高级编程语言 它的特点包括强大的跨平台性 面向对象的编程范式 丰富的类库以及良好的安全性 无论是在企业级应用开发 移动应用开发还是嵌入式系统开发中 Java都扮演着
  • [分享]如何使用Angular中的自定义校验器

    在Angular的开发中表单是必不可少的 由此引出的表单校验也是万万不可缺少的 解决方法一 全部使用ngModel 双向绑定数据 在最后的submit点击时进行所有表单的校验 这样做固然没有什么问题 而且代码写的也和我们之前使用jQuery
  • 单元格法近似求解多边形最大内接矩形问题【思路讲解+java实现】

    文章目录 问题描述 问题解决方案 多边形网格化 区分每个单元格是在多边形内部还是外部 根据已标记单元格寻找最大内接矩形 剪枝优化 多角度旋转 案例测试 代码实现 说明 问题描述 给定一个多边形的点集 希望找出多边形内部面积最大的矩形 该问题
  • SPI机制是什么?

    一 SPI机制是什么 spi全称为 Service Provider Interface 是JDK内置的一种服务提供发现机制 SPI是一种动态替换发现的机制 一种解耦非常优秀的思想 spi的工作原理 就是ClassPath路径下的META
  • 已知三角形三边长怎么求面积_已知三角形三边求面积的公式——海伦公式

    海伦公式又译作希伦公式 海龙公式 希罗公式 海伦 秦九韶公式 传说是古代的叙拉古国王希伦 Heron 也称海龙 二世发现的公式 是一个利用三角形的三条边长直接求三角形面积的公式 下面我们利用初中的知识进行推导 注意 公式推导过程的方法比公式
  • BigDecimal:比double更精确的小数类

    BigDecimal概述 BigInteger是Number的子类 它用来对超过16位有效位的数进行精确的运算 双精度浮点型变量double可以处理16位有效数 在实际应用中 需要对更大或者更小的数进行运算和处理 float和double只
  • Wordpess百度自动推送代码

    直接将代码中的token换成百度站长中自己的即可 将下列代码放入functions php中就行了 WordPress 百度快速收录 API 提交代码 if function exists Baidu Submit function Bai
  • 操作系统实验进程调度模拟

    操作系统实验 实验一 实验1 基于优先数的时间片轮转调度算法调度处理模拟程序设计 一 实验目的 1 对进程调度的工作做进一步的理解 2 了解进程调度的任务 3 通过编程掌握基于优先数的时间片轮转调度算法具体实现过程 二 实验内容及实验要求