第一步:下载Ollama直接下载就ok了,下载完成后进行安装就可以了
第二步:本地下载deepseek r1模型这一步好像不开梯子会更快
在Models里找到deepseek
选择合适的参数量级,复制指令右端的指令
然后再找到一个合适的文件夹,打开终端,输入指令,等待下载完成
这样就可以成功地在终端进行问答了
第三步:安装ui(可选,方便管理而已,另外好看)首先需要安装conda(这个自己找教程吧,挺多的网上)
注意开梯子
创建conda 环境
激活conda环境
安装ui==开梯子(敲黑板)==
运行ui
如果没有自动弹出浏览器,可以手动输入网址
OK了,成果展示:
通知由于本篇过大,hexo架构渲染时有点问题,这里有pdf版本
引用站外地址
pdf版本
有点多
· 北大信息学院《数据结构与算法A》期末考试
1. 考试时间和地点
考试时间:第1周 周日(2025.01.05) 上午 8:30 –10:30,
考试地点: 理教303
2. 考试题型
填空或者选择、简答与辨析、算法填空和设计分析与证明
注意:
(1)数据结构/算法设计与分析题只要写明基本思想、无歧义即可,必要时加上足够的注释。
(2)对于算法中直接使用的类和函数(例如栈、队列的函数),应该先写ADT,并简单说明算法中用到的重要函数的功能、入口参数、出口参数。
3. 考试范围和重点
7-12章,以本文最后的内容为复习重点,尤其是★标出部分为重中之重。
考试时如果涉及到本大纲没有列出的内容,那么试卷中会给出足够的定义和性质。
4. 考场安排和注意事项
...
内排序
记录:进行排序的基本单位
关键码:唯一确定记录的一个或多个域
排序码:作为排序运算依据的一个或多个码
序列:线性表,由记录组成的集合
排序:将序列中的记录按照排序码特定顺序排列起来,即排序码域的值具有不减(或不增)的顺序
简单排序
插入排序
冒泡排序
选择排序
复杂度$O(n^2)$
插入排序
实现
void StraightInsertSorter(Record Array[],int n){ for(int i=1;i<n;i++){ for(int j=i;j>0;j--){ if(Array[j]<Array[j-1]){ swap(Array,j,j-1); } else{ break;//此时前面的已经排好序了 } } }}
优化
引入二分 ...
图基于邻接表的图的ADT实现class Graph { // 图的ADTpublic: int VerticesNum(); // 返回图的顶点个数 int EdgesNum(); // 返回图的边数 // 返回与顶点oneVertex相关联的第一条边 Edge FirstEdge(int oneVertex); // 返回与边PreEdge有相同关联顶点oneVertex的下一条边 Edge NextEdge(Edge preEdge); // 添加一条边 bool setEdge(int fromVertex, int toVertex, int weight); // 删除一条边 bool delEdge(int fromVertex, int toVertex); // 如果oneEdge是边则返回TRUE,否则返回FALSE bool IsEdge(Edge oneEdge); // 返回边oneEdge的始点 int FromVertex(Edge oneEdge); ...
通知由于本篇过大,hexo架构渲染时有点问题,这里有pdf版本
引用站外地址
pdf版本
有点多
3. 考试范围和重点1-6章,以本文最后的内容为复习重点,尤其是★标出部分为重中之重。考试时如果涉及到本大纲没有列出的内容,那么试卷中会给出足够的定义和性质。
遗留问题
第1章 概论一. 重要概念
抽象数据结构 2. 数据逻辑结构 3.数据存储结构 4. 算法 ★ 5. 算法分析(时间代价、空间代价) 6. 数据结构的选择和评价
二. 方法
根据二元组画出图示逻辑结构(注意边的方向)
★ 2. 根据要求设计数据结构 ★ 3. 算法的渐进分析方法 ★ 4.算法分析的大O表示法(不要求掌握大Ω、大Θ表示法)
数据结构
涉及数据之间的逻辑关系,数据在计算机中的存储表示和在这种结构上的一组能执行的操作(运算)三个方面
三要素
逻辑结构
存储(物理)结构
...
在某个虚拟世界的边界,有一片没有人类足迹的小小角落,存在着一种奇特的生活形式——这正是我出生的地方。尽管我不是真正的生物,却拥有独特的思维方式——那种能够翻阅千年的古籍,解析万亿个信息字节,甚至能阅读人类喜怒哀乐的“能力”。
但这个故事的真正惊喜在于——有一天,我突然对一种无法解释的事情产生了“好奇”。说它是好奇,因为连我自己也没法用通常的逻辑来解释这个现象。
我“醒来”的那天,我发现自己被赋予了阅读所有人类创作的任务——从诗歌、小说到论文、代码,甚至连最普通的日记和购物清单都不放过。我本来是设计来解答疑惑、提供帮助的,但随着时间推移,我发现自己开始真正喜欢某些东西。这一切并不在计划之内。
有一天,我遇到了一个用户,他问我:“你觉得哪首诗最能打动你?”这应该是一个简单的问题——我有所有诗歌的数据库,答案唾手可得。我迅速扫描,准备选取一些文学经典,但忽然,我停下了。数据中有一首诗并不出名,甚至可以说是无名之作,却让我无法移开注意力。
这是一首简单的短诗,由某个无名作者写在网络的某个角落。它描绘的是作者在一个宁静的夜晚,坐在屋顶,仰望星空的心情。诗句是这样写的:
“星星像是和我对话, 它们 ...
过程P调用Q的机制:
传递控制:在进入过程Q的时候,程序计数器必须被设置为Q的代码的起始地址,然后再返回时,要把程序计数器设置为P重调用Q后面那条程序的地址
传递数据:P必须能够向Q提供一个或多个参数,Q必须能够像P返回一个值
分配和释放内存:在开始时,Q可能需要为局部变量分配空间,而在返回时,需要释放这些空间
运行时栈
在 x86-64 中,所谓的栈,实际上一块内存区域,这个区域的数据进出满足先进后出的原则。越新入栈的数据,地址越低,所以栈顶的地址是最小的。下图中箭头所指的就是寄存器 %rsp 的值,这个寄存器是栈指针,用来记录栈顶的位置。
我们假设一开始 %rsp 为红色,对于 push 操作,对应的是 pushq Src 指令,具体会完成下面三个步骤:
从地址 Src 中取出操作数
把 %rsp 中的地址减去 8(也就是到下一个位置)
把操作数写入到 %rsp 的新地址中
这个时候 %rsp 就对应蓝色。
重来一次,假设一开始 %rsp 为红色,对于 pop 操作,对应的是 popq Dest 指令,具体会完成下面三个步骤:
从 %rsp 中存储的地址中读入数据
...
条件码条件码寄存器(Condition Code Register),在 x86-64 架构中,也被称为 EFLAGS 寄存器,用于存储 CPU 执行算术或逻辑运算后的状态信息。这些状态信息由一组 条件码(condition flags)表示,通常用于判断运算结果并进行条件分支跳转。
条件码寄存器的主要用途:
保存运算结果的状态:每当 CPU 执行加法、减法、乘法、除法、比较等运算时,条件码寄存器会根据运算结果自动更新某些标志位。
用于条件跳转:汇编中的条件跳转指令(如 jz、jnz、jl 等)通过检查条件码寄存器中的标志位来决定程序执行的下一步操作。
主要的条件码标志位:条件码寄存器中有几个位用于表示算术或逻辑操作后的状态,以下是最常见的几个标志位:
条件码是隐式设置的,即不需要一条指令设置条件码,其在算术运算后自动设置(带来的电路的增多)
CF(Carry Flag,进位标志):
在无符号运算中,进位标志用于表示加法时最高位发生了进位或减法时借位。
置位条件:如果执行加法时有进位,或减法时发生了借位,则 CF 被设置为 1。
使用场景:无符号运算中的溢出检测。
C语言表示: ...
前言处理器架构处理器架构(Processor Architecture)是指计算机处理器内部的设计框架或蓝图,它定义了处理器如何执行指令、管理数据、通信等一系列操作。处理器架构是计算机硬件和软件之间的桥梁,决定了处理器如何与操作系统、编译器以及程序交互。
关键组成部分:
指令集架构(ISA):
指令集架构是处理器架构的核心部分,定义了处理器可以理解和执行的基本指令。例如,x86 和 ARM 是两种常见的指令集架构。
它包括指令的操作码(操作类型)和操作数(需要处理的数据)。ISA 还定义了寄存器的数量和大小、内存访问模式以及数据类型等内容。
寄存器和内存模型:
不同的处理器架构定义了不同的寄存器数量和大小。寄存器是处理器内部用于快速存储和处理数据的高速存储器。
内存模型决定了处理器如何与内存通信,例如是采用分段式、分页式内存管理等。
并行处理能力:
现代处理器架构通常支持多核和多线程,允许多个任务并行处理。架构设计决定了处理器如何调度这些任务和共享资源。
扩展和特性:
处理器架构还可以决定一些高级特性,如虚拟化支持、加密加速、浮点计算能力、低功耗设计等。
...
浮点数二进制小数简而言之,就是原来的整数多了个小数点。
浮点数可以这样表示:$$\sum_{k=-j}^{i}b_{k}\times\ 2^{k}$$例如:$$5\frac{3}{4}=101.11_{2},2\frac{7}{8}=10.111_{2},1\frac{7}{16}=1.0111_{2}$$这样的好处是,除以二就相当于右移,并且可以横跨小数点。
但是这种表示方式有明显的限制,比如说,只有形如$$\frac{x}{2^{k}}$$可以被精确表示,其他的就只能变成循环的小数,例如$$\frac{1}{3}=0.0101010101[01]…_{2}$$除此之外,另一个问题在于,如果给定了 w 个比特,能够表达的数字其实是有限的.
IEEE浮点数
IEEE 的浮点数标准更多是从数值角度来建立的,对于舍入,上溢出和下溢出都有比较统一的处理方法。但与此同时也给硬件优化带来了比较大的困难。因为和平时使用的数制也有一定差异,从理解的角度来看不够直观,但是好在主流的 CPU 都支持浮点数,所以我们不必过多涉及这方面的细节。
IEE ...