算法
文章平均质量分 66
CN-Dust
WAWAWA
展开
-
JS数组随机取数
需求:从长度为N的数组中,先剔除掉X个数,再从剩下的数里随机取M个数。假设N=1000,X为所有10的倍数(100个),M=10。原创 2024-09-24 02:51:03 · 1143 阅读 · 0 评论 -
【Ray Tracing】光线追踪(2) KD树-二分查找
KD树--二分查找原创 2022-10-18 22:01:53 · 711 阅读 · 0 评论 -
【Ray Tracing】光线追踪(1)
GAMES101 现代计算机图形学入门主讲老师:闫令琪,UCSB。原创 2022-10-17 20:53:25 · 498 阅读 · 0 评论 -
【Shading】Shadow Mapping 阴影映射
GAMES101 现代计算机图形学入门原创 2022-10-15 18:33:17 · 804 阅读 · 0 评论 -
【Geometry】Introduction 计算机几何学(3)网格的细分与简化
网格的细分与简化原创 2022-10-15 18:05:48 · 973 阅读 · 0 评论 -
【Geometry】Introduction 计算机几何学(2)计算机图形学中的显式几何、贝塞尔曲线
计算机图形学中的显式几何、贝塞尔曲线原创 2022-10-15 17:07:45 · 454 阅读 · 0 评论 -
【Geometry】Introduction 计算机几何学(1)
几何就很有意思了,这些曲面在我们的生活中,我们离近了去看,也看不见任何三角形。生活中是有这种光滑的曲面的。隐式的几何的表述,实际上是拿到任何空间中的一个点,表述空间中的一个面,只描述这些点满足什么样的关系。实际上就是写出一个函数,只要满足这么一个函数,那么这个点就在所描述的这个面上。定义一个函数f(x,y,z)f(x,y,z)f(x,y,z),只要能把所有满足条件的点找出来,就认为我们能把这个图形画出来。比如右边这张图,假设红色部分表示正的,蓝色部分表示负的,黑色的位0...原创 2022-07-11 20:47:16 · 420 阅读 · 0 评论 -
【Shading】Applying Textures 应用纹理
Applying Textures 应用纹理原理:屏幕上的任何一个点找到对应的纹理上的点,然后直接查,这个点对应纹理上的哪个点。那如果这么简单就好了!那么我们这么查,有什么问题呢?Texture Magnification 纹理放大What if the texture is too small?如果纹理太小,我们去查,纹理就会被拉大,导致我们看到这样的现象:Generally don’t want this — insufficient texture resolution通常,我们不希原创 2022-05-24 17:36:10 · 317 阅读 · 0 评论 -
Barycentric Coordinates 重心坐标
Barycentric Coordinates 重心坐标三角形上的任意一个点,都可以通过ABC的线性组合来表示。其中α+β+γ=1α+β+γ=1α+β+γ=1并且,只有当ααα,βββ,γγγ都大于等于零,这个点才处于三角形内。在这种定义下,A点自己的重心坐标是什么?很简单可以算出,A点的重心坐标是(1,0,0)(1,0,0)(1,0,0)其实我们可以想到,这个点的重心坐标可以用面积比来求出。那么,三角形自己的质心的重心坐标是什么呢?Formulas 公式α=−(x−xB)(yC原创 2022-05-24 16:35:20 · 239 阅读 · 0 评论 -
【Shading】Shader Programs
Shader Programs控制顶点和像素如何着色的代码——我们管它叫Shader。比如顶点着色器,我们只写对于顶点如何着色,而不用遍历每个顶点。Program vertex and fragment processing stagesDescribe operation on a single vertex (or fragment)一个像素着色器的例子(OpenGL)Shader function executes once per fragment.Outputs color of原创 2022-05-24 14:17:14 · 344 阅读 · 0 评论 -
【Shading】Graphics Pipeline 图形管线
Graphics (Real-time Rendering) Pipeline这个操作,也就是我们的显卡在GPU里运行的东西,是在硬件中写好的。原创 2022-05-24 14:03:19 · 132 阅读 · 0 评论 -
【Shading】Shading Frequencies 着色频率
课程来源:games101图形学入门Lecture07-08Lingqi YanUC Santa BarbaraPC端的读者可使用右侧文章目录进行导航Shading Frequencies 着色频率What caused the shading difference? 是什么导致了阴影上的差异?这三个球的几何表示是一模一样的,模型是一模一样的,但是着色的结果各不相同。也就是说,我们把着色应用在哪些点上?第一幅图对“面”的划分,一个平面我们只做一次Shading。第二幅图对顶点进行着色,并.原创 2022-05-24 13:41:21 · 368 阅读 · 0 评论 -
【Shading】Shading 着色
来源:games101图形学入门Lecture07Lingqi YanUC Santa BarbaraShadingDefinition 定义In Merriam-Webster Dictionary 在字典里shad·ing, [ˈʃeɪdɪŋ], nounThe darkening or coloring of an illustration or diagram with parallel lines or a block of color.In this course 在图形学.原创 2022-05-23 22:31:52 · 310 阅读 · 0 评论 -
【图像渲染】Z-Buffer 算法
来源:games101图形学入门Lecture07Lingqi YanUC Santa BarbaraZ-BufferIdea:Store current min. z-value for each sample (pixel)Needs an additional buffer for depth valuesframe buffer stores color valuesdepth buffer (z-buffer) stores depthIMPORTANT: For .原创 2022-05-23 21:49:37 · 960 阅读 · 0 评论 -
[JS][dfs]题解 | #迷宫问题#
题解 | #迷宫问题#题目链接迷宫问题题目描述定义一个二维数组 N*M ,如 5 × 5 数组下所示:int maze[5][5] = {0, 1, 0, 0, 0,0, 1, 1, 1, 0,0, 0, 0, 0, 0,0, 1, 1, 1, 0,0, 0, 0, 1, 0,};它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的路线。入口点为[0,0],既第一格是可以走的路。本题含有多组数据。输入描述:输原创 2022-03-07 15:27:43 · 671 阅读 · 0 评论 -
淘淘捡西瓜
地上有一排西瓜,每个西瓜都有自己的重量。淘淘有一个包,他从第一个西瓜开始捡。因为淘淘很贪心,所以他每看到一个西瓜就会捡起来。如果当前的西瓜超过的包的容量,那么淘淘就不会再捡了(包括后面的所有西瓜)。请问他能捡多少个?原创 2019-01-24 18:28:33 · 4058 阅读 · 6 评论 -
[JS][dp]题解 | #打家劫舍(一)#
题解 | #打家劫舍(一)#题目链接打家劫舍(一)题目描述描述你是一个经验丰富的小偷,准备偷沿街的一排房间,每个房间都存有一定的现金,为了防止被发现,你不能偷相邻的两家,即,如果偷了第一家,就不能再偷第二家;如果偷了第二家,那么就不能偷第一家和第三家。给定一个整数数组nums,数组中的元素表示每个房间存有的现金数额,请你计算在不被发现的前提下最多的偷窃金额。示例1输入:[1,2,3,4]返回值:6说明:最优方案是偷第 2,4 个房间示例2输入:[1,3,6]返回值原创 2022-03-04 14:56:54 · 912 阅读 · 0 评论 -
[JS]题解 | #魔法数字#
题解 | #魔法数字#题目链接魔法数字题目描述牛妹给牛牛写了一个数字n,然后又给自己写了一个数字m,她希望牛牛能执行最少的操作将他的数字转化成自己的。操作共有三种,如下:在当前数字的基础上加一,如:4转化为5在当前数字的基础上减一,如:4转化为3将当前数字变成它的平方,如:4转化为16返回最少需要的操作数。示例1输入3,10输出2示例2输入1,10输出4示例3输入24,500输出19解题思路本题实质上是简单递归,但剪枝过程原创 2022-03-04 14:17:49 · 735 阅读 · 0 评论 -
[JS]题解 | #岛屿数量#
题解 | #岛屿数量#题目链接岛屿数量解题思路很典型的染色法,对每个点进行dfs,将与之相邻的为1的点全染色,用sum记录当前染色值。简而言之,第一个岛全染色为-1,第二个岛全染色为-2,最后取最大负数的反,即为正确答案。用一个dfs就可以解决问题。解题代码/** * 判断岛屿数量 * @param grid string字符串型二维数组 * @return int整型 */function solve(grid) { // write code here /原创 2022-03-04 10:36:42 · 342 阅读 · 0 评论 -
【JS】实现找出一个二维数组中最长的相连串
描述:这是一个类似染色但并非染色的问题。给定一个二维数组表示一个岛的地图,其中不同的地势高度分别用不同的数字表示。求出在同一高度下,最长的路是多长。例如:给定4*4的二位数组0,1,2,10,0,1,21,0,0,10,0,0,0其中最长的路是:let n = 10;let m = 10;//定义一个二维数组let map = [];let book = [];for (let i = 0; i < n; i++) { map.push([]); b原创 2022-01-21 18:02:24 · 686 阅读 · 0 评论 -
[C++] 牛客网:合并两个有序的数组
主要是体验一下牛客网里的核心代码模式到底是怎么弄的。。还有C++这个东西平常用的太少了,试一试。以外的还体验到了sort()函数的使用。来源:牛客网题目链接:合并两个有序的数组知识点:数组、双指针描述给出一个整数数组 A 和有序的整数数组 B ,请将数组 B 合并到数组 A 中,变成一个有序的升序数组数据范围:注意:保证 A 数组有足够的空间存放 B 数组的元素, A 和 B 中初始的元素数目分别为 m 和 n,A的数组空间大小为 m+n不要返回合并的数组,将数组 B 的数据合并.原创 2021-09-28 10:09:13 · 326 阅读 · 0 评论 -
[JS][编程题]括号匹配
括号匹配题目来源:牛客网题目链接:括号匹配时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 256M,其他语言512M题目描述给定一个只包含括号的字符串,判断字符串是否有效。其中,括号种类包含: ‘(’,’)’,’{’,’}’,’[’,’]’。有效字符串需满足:1) 左括号必须用相同类型的右括号闭合;2)左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串示例1输入"{[]}"输出true示例2输入"([)]"输出false示例3输入原创 2021-09-26 00:31:41 · 456 阅读 · 0 评论 -
[JS][C++]两题斐波那契数列:上台阶、triangle
上台阶时间限制: 3000MS内存限制: 589824KB题目描述:有一楼梯共m级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第m级,共有多少走法?注:规定从一级到一级有0种走法。输入描述输入数据首先包含一个整数n(1<=n<=100),表示测试实例的个数,然后是n行数据,每行包含一个整数m,(1<=m<=40), 表示楼梯的级数。输出描述对于每个测试实例,请输出不同走法的数量。样例输入223样例输出12题解(js)let n =原创 2021-09-24 00:21:47 · 337 阅读 · 0 评论 -
[C] 神奇的堆——最小堆,最大堆,堆排序
堆——神奇的优先队列堆是一种特殊的完全二叉树,所有父节点都比子节点药效,符合这样的二叉树称之为堆。反之,如果所有父节点都比子节点要大,这样的完全二叉树称为最大堆。代码展示此处展示的是向上调整法建立最大堆。#include<stdio.h>int a[1000], n;void siftup(int i){ int flag = 0;//用来标记是否还需要向上调整 int t; if (i == 1) return;//如果是堆顶原创 2021-09-20 12:36:33 · 422 阅读 · 0 评论 -
[C] Bellman-Ford边松弛:解决负权边
Bellman-FordDijkstra算法是不能解决负权边的,而Bellman-Ford可以完美解决负权边的问题,还可以判断负权回路哦~Dijkstra算法传送门:Dijkstra算法——通过边实现松弛Bellman-Ford的核心代码只有4行: //Bellman-Ford 算法核心语句 for (k = 1; k <= n - 1; k++) for (i = 1; i <= m; i++) if (dis[v[i]] &g原创 2021-09-14 13:15:49 · 216 阅读 · 0 评论 -
[C] Dijkstra算法——通过边实现松弛
Dijkstra算法——通过边实现松弛本算法学习指定一个点(源点)到其余各个顶点的最短路径,也叫做单源最短路径例如求下图1号顶点到2,3,4,5,6号顶点的最短路径这个时候你可能就要问了,为什么不可以直接用上一篇 只有5行的算法:Floyd-Warshall 的方法把所有的最短路都求出来,然后取一行就行了呢?Floyd-Warshall算法的时间复杂度是O(N^3),而本文要介绍的Dijkstra算法时间复杂度是O(N^2),而且会在后续的堆里介绍优化本算法的方式。当数据过大时,Floyd-Wars原创 2021-09-14 12:57:43 · 162 阅读 · 0 评论 -
[C] [最短路] 只有5行的算法:Floyd-Warshall
终于学到求最短路了,终于来到我最喜欢的算法——Floyd-Warshall了!今天还有点小激动呢!我喜欢它,当然是因为它逻辑十分简单咯!真的只有5行诶!Floyd-Warshall算法题目描述暑假,小哼准备去一些城市旅游。有些城市之间有公路,有些城市之间则没有,如下图。为了节省经费以及方便计划旅程,小哼希望在出发之前知道任意两个城市之前的最短路程。核心思想对于一个用邻接矩阵存好的图,对于每一个点,将它作为转车点,然后再对每个点进行遍历,如果距离小于转机(直走还不如转车的情况下)就更新.原创 2021-09-14 11:41:05 · 161 阅读 · 0 评论 -
[C] 图的广度优先搜索——最少转机
我一直认为用C语言来描述数据结构(尤其是这种简单的)是一个非常不错的方式。C语言在表示数据,存取数据,表现数据结构里都没有那么多“捷径”可以走,所以用C语言写基础的数据结构的代码,是非常方便读者理解的。毕竟,C语言极有可能成为一个程序员的入门语言。题目描述小哼和小哈一同坐飞机去旅游,他们现在位于1号城市,目标是5号城市,可是1号城市并没有到5号城市的直航。不过小哼已经收集了很多航班的信息,现在小哼希望找到一种乘坐方式,使得转机的次数最少,如何解决呢?输入:5 7 1 51 21 3.原创 2021-09-14 01:35:58 · 289 阅读 · 0 评论 -
[C] 图的广度优先遍历
图的广度优先遍历我一直觉得图的遍历没有地图类型的题目难,遍历嘛,每个点都走一遍就行了。但是给定地图求面积啊,数量啊的那种题目,花样挺多的。图的遍历真挺难把人绕晕的,关于广度优先,理解好层层递进这个概念就好。还是这张图,上次我用了深度优先方法去遍历它:图的深度优先遍历这次用广度优先(BFS)法去遍历它代码实现#include<stdio.h>int book[2000], a[2000][2000], que[2000];int sum, n, m;int hea原创 2021-09-13 13:03:11 · 540 阅读 · 0 评论 -
[C] 图的深度优先遍历
图的DFS遍历首先我们需要知道什么是图简单地说,图就是由一些小圆点(称为顶点)和连接这些小圆点的直线(称为边)组成的。例如上图是由五个顶点(编号为1,2,3,4,5)和五条边(1-2,1-3,1-5,2-4,3-5)组成。接下来我将会展示从1号顶点以DFS算法遍历这张图的代码。每个顶点是第几个被访问到的,这个数字,称为时间戳。(在本段代码里没有体现)代码实现#include<stdio.h>int book[2000], a[2000][2000];int原创 2021-09-13 12:46:52 · 267 阅读 · 0 评论 -
[C] [编程题]连通块(DFS解决)
时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 256M,其他语言512M来源:牛客网 金山办公2020校招服务端开发工程师笔试题(一)题目描述给一个01矩阵,1代表是陆地,0代表海洋, 如果两个1相邻,那么这两个1属于同一个岛。我们只考虑上下左右为相邻。岛屿: 相邻陆地可以组成一个岛屿(相邻:上下左右) 判断岛屿个数。输入描述:第一行输入两个数字n,m(1<=n<=200,1<=m<=200)后面n行01序列,每一行m个字符,表示陆地和海洋输出描述.原创 2021-09-13 00:57:49 · 659 阅读 · 0 评论 -
[C] 深度优先搜索解决连通块/染色问题——求岛的个数
本文介绍用DFS解决连通块个数问题有关dfs的介绍见另外一篇:不撞南墙不回头——深度优先搜索例题宝岛探险题目描述一个小岛由一个主岛和一些复附属岛屿组成,该岛使用一个二维矩阵表示,其中数字表示海拔,0表示海洋,1~9表示陆地。探险家乘坐飞机降落在(6,8)处,现在需要统计探险家降落的地图的小岛数量,我们将探险家降落点上下左右相连接的陆地视作同一个岛屿。本文介绍DFS的解法,如果想了解用BFS解最大连通面积,看另一篇文章:层层递进——C语言实现广度优先搜索测试样例:10 10 6 8原创 2021-09-13 00:12:22 · 633 阅读 · 0 评论 -
[C] 层层递进——C语言实现广度优先搜索
以防万一有人想不开要做染色的题呢?比如我。广度优先搜索如何实现一个广度优先搜索广搜(bfs)是一个层层递进的概念,与深搜的不撞南墙不回头不同,广搜更像一个感染的过程,一个点只能感染到它周边的点。首先,我们要定义一个队列que,这里的que每一项是个结构体,包含x和y两个值。que队列装着访问过的点,与它有关的有两个变量(当做指针使用,但不是那个带*的指针)分别为head和tail,指向队头和队尾。对于每个入队的点,向四个方向拓展。这里我用一个next数组表示方向。(可以让代码看起来清新一点.原创 2021-09-13 00:05:40 · 3354 阅读 · 0 评论 -
[C] [二分] C语言实现快速排序
为了以防万一有人想不开想手撕快排呢?比如我。通过快排来理解二分思想什么是快排?快排的思想不难,理解好递归很重要。什么是递归?递归,就是在运行的过程中调用自己。构成递归需具备的条件:子问题须与原始问题为同样的事,且更为简单;不能无限制地调用本身,须有个出口,化简为非递归状况处理。什么是二分?“一尺之捶,日取其半,万世不竭” 相信你不陌生吧?这是来自《庄子·天下》中惠施的一句名言。说的就是二分(有的时候不得不感慨古人的智慧啊!)将一项大任务,不断自截两半,调用相同的处理函数分别处理.原创 2021-09-12 15:20:38 · 250 阅读 · 0 评论 -
[C] 不撞南墙不回头——深度优先搜索
深度优先搜索DFS的概念dfs:Depth First Search理解深度优先搜索的关键在于解决当下该如何做。至于下一步该如何做则与当下该如何做是一样的。通常的方法就是把每种可能都去尝试一遍(一般用for来遍历)当解决完这一步之后就dfs(step+1)下一步的解决方法和这一步是完全一样的以下给出dfs的基本模型(基于C语言实现)void dfs(int step){ 判断边界 尝试每一种可能for(i=1;i<=n;i++){ 继续下一步dfs(step+1); }原创 2021-09-11 22:54:00 · 239 阅读 · 1 评论 -
[C] [字节跳动] [编程题] 手串
时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 64M,其他语言128M链接:https://www.nowcoder.com/questionTerminal/0bb1fad52f474bdaa4d7636ca3a98244来源:牛客网首先遇到这一题是在字节跳动的一个前端试卷里,看上去不难,似乎就是一个数组+简单查找的问题。但是我一直报错,测试样例过了,提交代码就一直0分。气死了,遂上CSDN查找题解,作为一个底层C选手,让我找到了一篇C++的题解,看懂之后,这不跟我的思路一.原创 2021-09-11 14:51:18 · 315 阅读 · 1 评论 -
[JS] [C] [编程题] 用户喜好
字节跳动2018校招前端方向(第二批)同一个方法, 用JS就爆超时, 只能通过50%的用例, 用C就能AC…本题主要就是坑!!! 数据大!!! 大坑啊!!时间限制:C/C++ 3秒,其他语言6秒空间限制:C/C++ 256M,其他语言512M题目描述为了不断优化推荐效果,今日头条每天要存储和处理海量数据。假设有这样一种场景:我们对用户按照它们的注册时间先后来标号,对于一类文章,每个用户都有不同的喜好值,我们会想知道某一段时间内注册的用户(标号相连的一批用户)中,有多少用户对这类文章喜.原创 2021-09-11 12:30:19 · 111 阅读 · 0 评论 -
[JS] [编程题] 配置文件恢复
[编程题]配置文件恢复时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32M,其他语言64M链接:https://www.nowcoder.com/questionTerminal/ca6ac6ef9538419abf6f883f7d6f6ee5?toCommentId=10314559来源:牛客网题目描述有6条配置命令,它们执行的结果分别是:命 令执 行resetreset whatreset boardboard faultboa原创 2021-09-11 01:46:53 · 86 阅读 · 0 评论 -
[递归]一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
这题是用C写的~在牛客上半天找不着ACM模式,练习模式里只有核心代码模式这样用C语言编译器就不能自定义函数啊,不鸡肋吗???解决方法:在核心代码模式下用C++编译器(反正C++完全兼容C的不是吗~~)但是这样并不好,很气!看题吧描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。示例1输入:2返回值:2示例2输入:7返回值:21我的代码(完整版)#include<stdio.h&.原创 2021-09-09 12:32:47 · 1195 阅读 · 0 评论 -
[JS]请填充代码,使mySort()能使传入的参数按照从小到大的顺序显示出来。
请填充代码,使mySort()能使传入的参数按照从小到大的顺序显示出来。刚开始刷js题真是不适应啊,这次体会到sort()的香了~请填充代码,使mySort()能使传入的参数按照从小到大的顺序显示出来。function mySort() { var tags = new Array();//使用数组作为参数存储容器 请补充你的代码 return tags;//返回已经排序的数组}var result = mySort(50,11,16,32,24,99,57,100)原创 2021-09-08 01:21:45 · 432 阅读 · 0 评论