首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏技术总结

    算法3

    上两篇: 算法(1) 算法(2) 一、常见的时间复杂度 常用的时间复杂度.png 二、最坏情况和平均情况 最坏情况运行时间是一种保证,那就是运行时间将不会再坏了 平均时间是所有情况中最有意义的 对算法的分析,一种方法是计算所有情况的平均值,这种时间复杂度的计算方法称为时间复杂度。另一种方法是计算最坏情况下的时间复杂度,这种方法称为最坏时间时间复杂度。 三、算法空间复杂度 算法的空间复杂度通过计算算法所需的存储空间实现,算法空间复杂度的计算公式记作:S(n) = O(f(n)),其中,n为问题的规模,f(n)为语句关于n所占存储空间的函数. 结尾语: 很多学生,学了四年计算机专业,很多程序员,做了很长时间的编程工作,却始终都弄不明白算法的时间复杂度的估算,这是很可悲的一件事。 算法的重要

    71570发布于 2018-05-22
  • 来自专栏云深之无迹

    Python算法.3

    int(intput('>>>') if i // 10000: print(5): elif i // 1000: print(4) elif i // 100: print(3) #限定5位 if a<10: print(1) elif a<100: print(2) elif a<1000: print(3) print("请输入一个不超过5位的数") nnumber=input(">>>>") length=len(nnumber) if length>4: print(5) elif length>3: print(4) elif length>2: print(3) elif length>1: print(2) else: print(1) number=int(input

    60730发布于 2021-04-28
  • 来自专栏修也的进阶日记

    算法手记3

    23910编辑于 2025-03-14
  • 来自专栏python3

    算法3

    ---- 摘自传智播客公开课 ---- package test; import java.util.Scanner; public class Arithmetic3 { //题设 break; case 2: System.out.println("青年"); break; case 3:

    36710发布于 2020-01-10
  • 来自专栏云深之无迹

    Python 算法.3

    单向链表也叫单链表,是链表中最简单的一种形式,它的每个节点包含两个域,一个信息域(元素域)和一个链接域。这个链接指向链表中的下一个节点,而最后一个节点的链接域则指向一个空值。

    58320发布于 2021-04-28
  • 来自专栏数据云团

    算法篇-python排序算法-3

    你能发现它是在某个区间内交换位置,也采用了标志位的做法,那就是先取最左边的元素。

    55330发布于 2019-07-18
  • 来自专栏国产程序员

    垃圾回收算法(3)-标记清除算法

    前言 标记清除算法(Mark-Sweep)是一种非常基础和常见的垃圾收集算法,该算法被J.McCarthy等人在1960年提出并成功的发明并应用于Lisp语言。 这2个名词经常在垃圾收集算法中出现。 collector指的就是垃圾收集器。 mutator是指除了垃圾收集器之外的部分,比如说我们的应用程序本身。 算法原理 标记清除算法将垃圾回收分为2个阶段,标记阶段和清除阶段。 存在问题 标记清除算法最大的问题是存在大量的空间碎片,因为回收后的空间是不连续的。在对象的堆空间分配过程中,尤其是大对象的内存分配,不连续的内存空间的工作效率要低于连续的空间。 ?

    1.1K10发布于 2020-07-14
  • 来自专栏Initial programming

    初识算法 · 分治(3)

    交易逆序对的总数 - 力扣(LeetCode) 题目分为三个部分讲解,一是题目解析,二是算法原理,三是算法编写,那么,话不多说,直接进行主题咯。 归并排序 题目解析 其实这个题目我们已经在分治1里面做过了,但是在分治1里面使用的是快排,本文介绍分治的另一种算法,即归并排序。 直接就进入原理吧! 算法原理 对于归并排序来说,基本思想是将数组不断的划分,不断的划分,直到划分到了一个数的情况,这么做的原因是为了后面方便合并数组,你想,如果存在两个有序数组,我们想要合并这个有序数组是不是十分容易? 那么对于归并算法同理,我们将数组不断的划分,不断的划分,直到划分为一个元素,此时,我们将该元素视为有序的,所以分治的第一步就完成了,我们应该递归回去了。 那么对于归并排序来说,是将左右划分,并排好序,最后合并,这其实就是树的后序遍历: 对于快排来说,是先确定好了一个元素的位置,然后排序左右两边,这实际上是一种前序遍历: 现在直接算法编写吧!

    19910编辑于 2024-11-26
  • 来自专栏重归混沌

    DC3算法

    算法导论上的LCS(公共子序列)算法并不是很适合我,因为COPY只是去借数据,并不在乎这块数据在哪个位置。 但是其生成算法DC3,我搞了将近2周才总算搞明白。 整个算法一共就分4步,原始数据在buf中,长度为N,(这里仅粗略描述): 1. 将(i % 3 ! 这算法并不是通常见到的,如快排,二分查找,甚至红黑树那么直观。他神奇到,我完全不知道这是在做什么,后缀数组已经排完序了。 在看这个算法时,在第2步我有几个很大的疑惑。 ---- 搞明白之后发现,整个算法的核心思想就是”收敛”, 运用递归的思想不断的收敛,直到比如结果为止。 总的来说这是一个很神奇的算法,有动态规划的影子,各个步骤又配合的天衣无缝。

    78920发布于 2020-04-26
  • 来自专栏强化学习专栏

    聚类算法3)---K-means 算法

    文章分类在AI学习笔记: AI学习笔记(9)---《聚类算法3)---K-means 算法》 聚类算法3)---K-means 算法 1. 理解并掌握感 K-means 算法原理以及物理含义,编写一个简单的基于欧式距离的 K-means 算法进行聚类的例子。 在后面介绍的 K-means 聚类算法中,使用重心距离法会简化计算过程。 3.K-means 算法原理 K-means 算法是一种动态聚类算法。 动态聚类算法的基本步骤是: 选取初始聚类中心及有关参数,进行初始聚类; 计算样本和聚类的距离,调整样本的类别; 计算各聚类的参数,删除、合并或分类一些聚类; 从初始聚类开始,通过迭代算法动态的改变类别和聚类中心 = [1 1 1; 2 2 2]; b3 = [3 3 3; 0 0 0; 5 5 5]; a4 = [1 2 3 4 5 6 7 8 9]; b4 = [1 1 2 3 4 5 6 8 9; 5 5

    36410编辑于 2024-12-03
  • 来自专栏数据科学与人工智能

    3个机器学习算法

    3、ADABOOST   adaboost 是 bosting 的方法之一。   bosting就是把若干个分类效果并不好的分类器综合起来考虑,会得到一个效果比较好的分类器。    training的时候,会得到每个feature的weight,例如2和3的开头部分很像,这个feature对分类起到的作用很小,它的权重也就会较小。 ?   

    49020发布于 2019-05-28
  • 来自专栏Initial programming

    初识算法 · 滑动窗口(3)

    找到字符串中所有字母异位词 - 力扣(LeetCode) 题目分为三个部分讲解,一是题目解析,二是算法原理,三是算法编写,那么,话不多说,直接进行主题咯。 算法原理 算法原理就非常简单了,需要一个变量判断种类,所以引入变量,又因为数的范围是10的五次方 所以引入的hash表为100001,并且是固定的三部曲,进窗口的时候维护kind,如果最开始为0,那么没有该水果种类 题目要求也是没有要特别注意的,现在就进入算法原理部分。 算法原理 算法一眼判定为滑动窗口,因为我们是用一个连续的区间,来和另一个连续的区间进行比较,那么正常的就是进窗口,出窗口,进行判断,进窗口自然是使用right指针,进窗口之后。 什么时候出窗口呢? 那么优化我们放在算法编写里面。

    27210编辑于 2024-10-16
  • 来自专栏Initial programming

    初识算法 · 位运算(3)

    两整数之和 - 力扣(LeetCode) 题目分为三个部分讲解,一是题目解析,二是算法原理,三是算法编写,那么,话不多说,直接进行主题咯。​ 对于这道题目,要求是让我们找到一大堆数字中只出现过一次的数字,对于只出现一次的数字I和只出现一次的数字III,重复的数字都是重复出现了2次,或者是说找两个重复的数字,但是对于这道题目,它重复出现的数字是重复了3次 ,就相对来说麻烦一点,题目的要求我们清楚了,直接进入到算法原理吧。 算法原理 虽然说是使用的异或运算,但是这里我们不妨列出一个规律: 由于整个数组中,需要找的元素只出现了「⼀次」,其余的数都出现的「三次」,因此我们可以根 据所有数的「某⼀个⽐特位」的总和 %3 的结果, int x : nums) if (((x >> i) & 1) == 1) sum++; sum %= 3;

    22110编辑于 2024-11-19
  • 来自专栏生信技能树

    3种EMT打分算法

    看到一个预印本文章对3种EMT打分算法进行了测评,挺有意思的,标题是:《Comparative study of transcriptomics-based scoring metrics for the 加权线性加和(76-gene EMT signature) 这个算法对CDH1 (E-cadherin)的权重很高,所以epithelial的EMT scores是比mesenchymal高。 每个文章都有自己的EMT打分算法 比如发表于2020年1月的文章;《Gene signatures of tumor inflammation and epithelial-to-mesenchymal 2.表达增多:N- cadherin,Vinmentin,Snail1,Snail2,Twi st,MMP-2,MMP-3,MMP-9。 3.活性增加:ILK,Rho。 3.Notch信号通路。 4.SMAD信号通路。 5.PI3K-AKT-MTOR信号通路。 三.

    2.1K30发布于 2021-04-13
  • 来自专栏惊羽-布壳儿

    算法练习(3) - 链表排序

    // // // // // 示例 1: // // //输入:head = [4,2,1,3] //输出:[1,2,3,4] // // // 示例 2: // // //输入:head = [-1,5,3,4,0 ] //输出:[-1,0,3,4,5] // // // 示例 3: // // //输入:head = [] //输出:[] // // // // // 提示: // // // 链表中节点的数目在范围

    32310编辑于 2022-06-15
  • 来自专栏Initial programming

    初识算法 · 双指针(3)

    前言: 本文通过介绍和为S的两数之和,以及三数之和,对双指针算法进行深一步的了解,介绍该算法博主使用三部曲,第一步对题目进行分析,里面会夹杂着暴力解法的问题,第二步对于算法原理进行分析,第三步则是对算法进行编写 算法原理: 使用双指针算法,对于题目中的升序,一定要利用好,我们知道: target = num1 + num2 那么既然是升序的,如果我们让两个指针,一个从开始走,一个从末尾走,也就是最大的和最小的走 但是暴力解法的时间复杂度可就高了,三个数都要单独列出,也就是需要三个循环,时间复杂度为O(N^3),往往是通过不了的。 所以,我们进入到算法原理方面。 算法原理 我们同样的使用双指针算法,因为是双指针不是三指针,所以需要我们固定一个数,用来充当target,有了第一个题目的经验,我们不妨排序一下,保证数组有序的同时有利于我们控制指针变量,排序之后对于我们去重的操作也会容易很多 排序之后,固定好target,然后进入到第二个循环,通过双指针算法,找两个数,使该三个数相加等于0即可。

    25510编辑于 2024-10-16
  • 来自专栏算法工程师之路

    每日算法题:Day 3

    文章和资源同步更新至微信公众号:算法工程师之路 Day 3,继续加油,数据结构知识点! 1 编程题 【剑指Offer】用堆栈实现队列 用两个栈来实现一个队列,完成队列的Push和Pop操作。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。 对于一棵二叉树而言,其节点总数n=n0+n1+n2,不存在度为3的节点n3。又可以表示为节点总数n=2n2+1n1+0*n0+1,即总度数+1。 3 资源分享 欢迎关注我的个人公众号 (算法工程师之路),回复"左神算法基础CPP"即可获得大量算法源码,并实时更新! 希望大家多多支持哦~ 公众号简介:分享算法工程师必备技能,谈谈那些有深度有意思的算法,主要范围:C++数据结构与算法/深度学习(CV),立志成为Offer收割机!

    42420发布于 2019-08-06
  • 来自专栏图形学与OpenGL

    实验3 直线裁剪算法

    1.实验目的: 理解直线裁剪的基本原理; 验证直线的编码裁剪算法,参考网络资料实现梁友栋-Barsky裁剪算法; 了解与掌握OpenGL鼠标操作。 2.实验内容: 本次实验主要结合鼠标画线程序来验证编码裁剪算法和实现梁友栋-Barsky裁剪算法,具体步骤如下: (1) 阅读学习所给的编码裁剪示范代码,了解程序使用方法,并结合三种不同类型直线对其进行裁剪测试 ,将测试结果存为图1-3,保存至word实验文档中(30分钟); (2) 为示范代码增加梁友栋-Barsky裁剪算法,并通过键盘按键“L”来控制,即按键盘“L”键时,用梁友栋-Barsky算法裁剪程序窗口内的直线 3.实验原理: 示范代码中编码裁剪算法原理参见教材裁剪内容,有关鼠标操作知识请参考OpenGL编程 基础篇(四)与鼠标的交互。 (1.0f, 0.0f, 0.0f); glVertex2f(x0, y0); glColor3f(1.0f, 0.0f, 0.0f); glVertex2f(x1, y1); glEnd(

    1K10发布于 2019-02-25
  • 来自专栏python3

    3des算法源码

    } private static SymmetricAlgorithm SetEnc() {   return new DESCryptoServiceProvider(); } } 3DES (即Triple DES)是DES向AES过渡的加密算法(1999年,NIST将3-DES指定为过渡的加密标准),是DES的一个更安全的变形。 它以DES为基本模块,通过组合分组方法设计出分组加密算法,其具体实现如下:设Ek()和Dk()代表DES算法的加密和解密过程,K代表DES算法使用的密钥,P代表明文,C代表密表,这样, 3DES加密过程为 :C=Ek3(Dk2(Ek1(P))) 3DES解密过程为:P=Dk1((EK2(Dk3(C))) 具体的加/解密过程如图2所示。 K1、K2、K3决定了算法的安全性,若三个密钥互不相同,本质上就相当于用一个长为168位的密钥进行加密。多年来,它在对付强力***时是比较安全的。若数据对安全性要求不那么高,K1可以等于K3

    96910发布于 2020-01-10
  • 来自专栏C/C++、数据结构、算法

    贪心算法总结(3

    while(n>1) { if(n%2==0) n/=2,++ret; else { if(n==3) class Solution { public: int maxSumDivThree(vector<int>& nums) { // 正难则反 //sum%3= =0 //sum%3==1 x1 或者y1y2 //sum%3==2 x1x2或者y1 const int INF=0x3f3f3f3f ,x1=INF,x2=INF,y1=INF,y2=INF; for(auto&e:nums) { sum+=e; if(e%3= =0) return sum; else if(sum%3==1) return max(sum-x1,sum-y1-y2); else return max(sum-x1

    21610编辑于 2024-08-11
领券