算法学习(一)

article/2025/9/15 13:23:49

算法第四版学习笔记–1.3 Bags, Queues and Stacks

前面120页都是Java基础,建议有Java基础的同学可以直接从120页开始学习,但是这里面的例子有用到algs4这个jar,需要稍微了解一下,影响不大,都是对JDK的一些封装。

Introduction

这一章,包括bag, queue, 和 stack。都是用来存东西,都有add,remove,examine,但是呢,他们有着一些区别,(哪一个对象是下一次remove或者examine)。
三个目标:

  • 强调数据结构对效率的影响
  • 介绍泛型和迭代器
  • 介绍linked data structure,(linked list)可以用来实现以上提到的三种数据结构

API

Bag

public class Bag<Item> implements Iterable<Item>Bag() //无参构造方法void add(Item item) //添加boolean isEmpty() //是不是为空int size() //容量

包是一种不能移除东西的数据结构,只能遍历。遍历的顺序不规定,对用户来说不重要。

public class Stats
{
public static void main(String[] args)
{Bag<Double> numbers = new Bag<Double>();while (!StdIn.isEmpty())numbers.add(StdIn.readDouble());int N = numbers.size();double sum = 0.0;for (double x : numbers)sum += x;double mean = sum/N;sum = 0.0;for (double x : numbers)sum += (x - mean)*(x - mean);double std = Math.sqrt(sum/(N-1));StdOut.printf("Mean: %.2f\n", mean);StdOut.printf("Std dev: %.2f\n", std);
}
}

FIFO Queue 先进先出

public class Queue<Item> implements Iterable<Item>Queue()void enqueue<Item> // 加一个Item dequeue() //removeboolean isEmpty()int size()

队列遵循先进先出政策。
在这里插入图片描述
典型的使用队列的例子,把对象存放在一个集合中,并且要保持他们的相对顺序。

PushDown (LIFO) Stack 后进先出

public class Stack<Item> implements Iterable<Item>Stack()void push(Item item) //addItem pop() //remove 最新加入的boolean isEmpty()int size()

栈是一种基于后进先出规则的一种集合。
什么时候需要用到它,反向输出的时候!!!!!
在这里插入图片描述
泛型,自动开箱,自动装箱。。。就不细说了。。。

算数表达式evaluation

( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) )
假设:

  • 可以是一个数字,一个左括号跟一个算数表达式一个操作符另一个算数表达式右括号。(expression 操作符 expression)可以嵌套。
  • 我们只考虑全括号状态,只靠括号来判断,而不是依靠优先级
  • 只有 + - * / sqrt
public class Evaluate {public static void main(String[] args) {char[] c = "( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) )".toCharArray();String op = "+-*/";Stack<String> ops = new Stack<String>();Stack<Double> vals = new Stack<Double>();for (char cc : c) {if (cc == ' ' || cc == '(') {//do nothing} else if (op.contains(String.valueOf(cc))) {ops.push(String.valueOf(cc));} else if (cc == ')') {double a = vals.pop();double b = vals.pop();double result = 0.0;switch (ops.pop()){case "+":result = a+b;break;case "-":result = a-b;break;case "*":result = a*b;break;case "/":result = a/b;break;}vals.push(result);} else {vals.push(Double.valueOf(String.valueOf(cc)));}}System.out.println(vals.pop());}
}

大概就是这个意思。。。省略了sqrt,并且输入的地方没有考虑这个十位数之类的问题。
每一次需要解决的都是(expr operand expr)
( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) )
先解决(2+3)放在堆栈最上方,然后再解决( 4 * 5 )…


http://chatgpt.dhexx.cn/article/Za8WY3V2.shtml

相关文章

算法学习入门

14天阅读挑战赛 *努力是为了不平庸~ 算法学习有些时候是枯燥的&#xff0c;这一次&#xff0c;让我们先人一步&#xff0c;趣学算法&#xff01;欢迎记录下你的那些努力时刻&#xff08;算法学习知识点/算法题解/遇到的算法bug/等等&#xff09;&#xff0c;在分享的同时加深对…

什么是算法?如何学习算法?算法入门的学习路径

何为算法 简单的说,算法就是:解决问题的手段,并且是批量化解决问题的手段。 比如,我们想要从成都去北京,起点就是成都,终点就是北京。如何去?我们就可以称为算法。 因此选择不同的算法,那么虽然终点都是一样,但是性能以及效率就根据算法的优劣而决定的。因此,我们…

如何学习算法?

今天在群里刚好看到有人在讨论算法的问题&#xff0c;刚好自己曾经也有一个算法大神的梦&#xff0c;来说说自己对算法的理解。 算法怎么学&#xff1f;什么样程度才算把算法学透&#xff1f;算法学会了有什么用&#xff1f; 算法的学习是非常重要的&#xff0c;那算法学到什么…

突发!大连理工大学研三学生自杀,遗书曝光,研究生的压力应该谁来化解?...

点击上方“码农突围”&#xff0c;马上关注 这里是码农充电第一站&#xff0c;回复“666”&#xff0c;获取一份专属大礼包真爱&#xff0c;请设置“星标”或点个“在看” 来源&#xff1a;科研干货 10月13日&#xff0c;微博上一个名为“红烧土豆叶”的网友引起广大网友关注&a…

英雄算法学习路线

文章目录 零、自我介绍一、关于拜师二、关于编程语言三、算法学习路线1、算法集训1&#xff09;九日集训2&#xff09;每月算法集训 2、算法专栏3、算法总包 四、英雄算法联盟1、英雄算法联盟是什么&#xff1f;2、如何加入英雄算法联盟&#xff1f;3、为何会有英雄算法联盟&am…

算法如何学习?别想太多,两个字

文章目录 前言一、语言基础1、「 光天化日学C语言 」 二、刷题必读1、「 LeetCode零基础指南 」2、「 九日集训每日打卡 」 三、语言入门1、「 C语言入门100例 」 四、算法入门1、「 算法零基础100讲 」 五、算法进阶1、「 画解数据结构 」2、「 LeetCode算法题集汇总 」3、「 …

YOLOv5剪枝✂️| 模型剪枝实战篇

本篇博文所用代码为开源项目修改得到,且不适合基础太差的同学。 本篇文章主要讲解代码的使用方式,手把手带你实现YOLOv5模型剪枝操作。 文章目录 0. 环境准备1. 使用YOLOv5训练自己的模型2. 对训练好的模型进行稀疏训练3. 对稀疏训练后的模型进行剪枝4. 对剪枝后的网络模型微…

决策树——预剪枝和后剪枝

目录 简析 为什么要剪枝&#xff1f; 剪枝的基本策略 预剪枝 后剪枝 剪枝的优缺点 预剪枝的优缺点 后剪枝的优缺点 实现 数据集 剪枝前 预剪枝 分析 代码 简析 为什么要剪枝&#xff1f; “剪枝”是决策树学习算法对付 “过拟合” 的主要手段 可通过“剪枝”来…

网络剪枝通俗解释

论文链接&#xff1a;Learning Efficient Convolutional Networks through Network Slimming 视频链接&#xff1a;唐宇迪 基本思想 我们在模型生成通道数为[64,128,256,512]的特征图&#xff0c;但是这些特征图不一定都重要&#xff0c;我们希望能够体现特征图的主次之分&…

α、β剪枝法

在讲α、β剪枝法之前&#xff0c;我们先了解一下极大极小值算法&#xff1b;因为α、β剪枝法是为了简化极大极小值的计算而提出的。 极大极小值法 Minimax算法 又名极小化极大算法&#xff0c;是一种找出失败的最大可能性中的最小值的算法&#xff08;即最小化对手的最大得益…

决策树的剪枝

目录 一、为什么要剪枝 二、剪枝的策略 1、预剪枝&#xff08;pre-pruning&#xff09; 2、后剪枝&#xff08;post-pruning&#xff09; 三、代码实现 1、收集、准备数据&#xff1a; 2、分析数据&#xff1a; 3、预剪枝及测试&#xff1a; 4、后剪枝及测试&#xff1…

决策树算法和剪枝原理

决策树算法和剪枝原理 本节我们对决策算法原理做简单的解析&#xff0c;帮助您理清算法思路&#xff0c;温故而知新。 我们知道&#xff0c;决策树算法是一种树形分类结构&#xff0c;要通过这棵树实现样本分类&#xff0c;就要根据 if -else 原理设置判别条件。因此您可以这…

决策树(decision tree)(二)——剪枝

决策树&#xff08;decision tree&#xff09;(二)——剪枝 **注&#xff1a;本博客为周志华《机器学习》读书笔记&#xff0c;虽然有一些自己的理解&#xff0c;但是其中仍然有大量文字摘自周老师的《机器学习》书。 决策树系列博客&#xff1a; 决策树&#xff08;一&#x…

机器学习--决策树二(预剪枝和后剪枝)

一、什么是决策树的剪枝 对比日常生活中&#xff0c;环卫工人在大街上给生长茂密的树进行枝叶的修剪。在机器学习的决策树算法中&#xff0c;有对应的剪枝算法。将比较复杂的决策树&#xff0c;化简为较为简单的版本&#xff0c;并且不损失算法的性能。 二、为什么要剪枝 剪枝…

关于剪枝对象的分类(weights剪枝、神经元剪枝、filters剪枝、layers剪枝、channel剪枝、对channel分组剪枝、Stripe剪枝)

文章目录 剪枝对象分析&#xff1a;1.weights剪枝&#xff1a;2.神经元剪枝&#xff1a;3.Filters剪枝&#xff1a;4.通道剪枝5.Group-wise剪枝6.Stripe剪枝 剪枝对象分析&#xff1a; 剪枝分为结构化剪枝和非结构化剪枝&#xff0c;细化可分为weights剪枝、神经元剪枝、filte…

决策树——剪枝处理

剪枝处理 1&#xff1a;剪枝处理的原因 “剪枝”是决策树学习算法对付“过拟合”的主要手段&#xff0c;因此&#xff0c;可通过“剪枝”来一定程度避免因决策分支过多&#xff0c;以致于把训练集自身的一些特点当做所有数据都具有的一般性质而导致的过拟合 2&#xff1a;剪…

【ML】决策树--剪枝处理(预剪枝、后剪枝)

1. 剪枝&#xff08;pruning&#xff09;处理 首先&#xff0c;我们先说一下剪枝的目的——防止“过拟合”。 在决策树的学习过程中&#xff0c;为了保证正确性&#xff0c;会不断的进行划分&#xff0c;这样可能会导致对于训练样本能够达到一个很好的准确性&#xff0c;但是…

深度学习剪枝

一般来说&#xff0c;神经网络层数越深、参数越多&#xff0c;所得出的结果就越精细。但与此同时&#xff0c;问题也来了&#xff1a;越精细&#xff0c;意味着所消耗的计算资源也就越多。这个问题怎么破&#xff1f;这就要靠剪枝技术了。言下之意&#xff0c;把那些对输出结果…

决策树后剪枝算法(一)代价复杂度剪枝CPP

​  ​​ ​决策树后剪枝算法&#xff08;一&#xff09;代价复杂度剪枝CPP  ​​ ​决策树后剪枝算法&#xff08;二&#xff09;错误率降低剪枝REP  ​​ ​决策树后剪枝算法&#xff08;三&#xff09;悲观错误剪枝PEP  ​​ ​决策树后剪枝算法&#xff08;四&…

机器学习-预剪枝和后剪枝

一棵完全生长的决策树会面临一个很严重的问题&#xff0c;即过拟合。当模型过拟合进行预测时&#xff0c;在测试集上的效果将会很差。因此我们需要对决策树进行剪枝&#xff0c; 剪掉一些枝叶&#xff0c;提升模型的泛化能力。 决策树的剪枝通常有两种方法&#xff0c;预剪枝&a…