![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 69
Gordennizaicunzai
这个作者很懒,什么都没留下…
展开
-
python单向链表增删查改
链表是一种线性表,但是并不会按线性的顺序存储数据,它每个节点由数据和一个指针组成,指针指向下一个节点的数据。因为链表不必按顺序存储,所以链表在插入数据时间复杂度可达到O(1),且可以不必事先知道数据大写,可充分利用计算机的内存,内存可动态管理。但是链表的缺点也很明显,由于增加了结点的指针域,空间开销比顺序表大,且查找一个节点或者访问特定编号的节点则需要O(n)的时间,而顺序表则可达O(1)。实际应用中与数组类似地,通常将使用头结点(第一个结点)来表示整个列表。# -*- coding: utf-8 -原创 2021-03-02 00:09:30 · 385 阅读 · 0 评论 -
二叉搜索树(BST)---python实现
本文算法均使用python3实现1. 二叉搜索树定义 二叉搜索树(Binary Search Tree),又名二叉排序树(Binary Sort Tree)。 二叉搜索树是具有有以下性质的二叉树: (1)若左子树不为空,则左子树上所有节点的值均小于或等于它的根节点的值。 (2)若右子树不为空,则右子树上所有节点的值均大于或等于它的根节点的值。 (3)左、右子树也分别为二叉搜索树。2. 二叉搜索树的相关操作2.1 插入操作 从根节点开始,若插入的值比根节点的值小,则将其转载 2021-02-24 23:02:22 · 922 阅读 · 0 评论 -
python二叉树的创建和遍历
树的相关定义参考资料:二叉树的Python实现 - 山阴少年 - 博客园树的定义与基本术语 树型结构是一类重要的非线性数据结构,其中以树和二叉树最为常用,是以分支关系定义的层次结构。树结构在客观世界中广泛存在,如人类社会的族谱和各种社会组织机构;在计算机领域中也有广泛应用,如在编译程序中,可用树来表示源程序的语法结构;在数据库系统中,树型结构也是信息的重要组织形式之一;在机器学习中,决策树,随机森林,GBDT等是常见的树模型。 树(Tree)是n(n≥0)个结点的有限集。在任意一棵树中:(1)原创 2021-02-15 23:54:15 · 1032 阅读 · 0 评论 -
LeetCode 35 搜索插入位置
35. 搜索插入位置难度简单815收藏分享切换为英文接收动态反馈给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。示例 1:输入: [1,3,5,6], 5输出: 2示例2:输入: [1,3,5,6], 2输出: 1示例 3:输入: [1,3,5,6], 7输出: 4示例 4:输入: [1,3,5,6], 0输出: 0已排序,首选二分..原创 2021-02-08 21:34:37 · 102 阅读 · 0 评论 -
常见的用户密码加密方式以及破解方法
http://geek.csdn.net/news/detail/108566【作者】张辉,就职于携程技术中心信息安全部,负责安全产品的设计与研发。作为互联网公司的信息安全从业人员经常要处理撞库扫号事件,产生撞库扫号的根本原因是一些企业发生了信息泄露事件,且这些泄露数据未加密或者加密方式比较弱,导致黑客可以还原出原始的用户密码。目前已经曝光的信息泄露事件至少上百起,其中包括多家一线互联网公司,泄露总数据超过10亿条。要完全防止信息泄露是非常困难的事情,除了防止黑客外,还要防止内部人员泄密。但如果采转载 2020-12-27 22:41:01 · 2381 阅读 · 1 评论 -
python base64加密和解密
base64可用加密和解密,为Python内置模块,可以实现base64、base32、base16、base85、urlsafe_base64的编码解码,python 3.x通常输入输出都是二进制形式,2.x可以是字符串形式。base64模块的base64编码、解码调用了binascii模块,binascii模块中的b2a_base64()函数用于base64编码,binascii模块中的a2b_base64()函数用于base64解码。# coding=utf-8import base64原创 2020-12-27 22:38:18 · 588 阅读 · 0 评论 -
python插入排序
C/C++插入排序:https://blog.csdn.net/Gordennizaicunzai/article/details/68982494插入排序适用于少量元素的排序,适用于大部分数据已经过排序或已排序的数据库在新增数据后面再进行排序,属于稳定排序。最坏情况n个元素需要排n(n-1)/2次,时间复杂度为O(n^2);最好情况只需排一次时间复杂度为O(n)。空间复杂度佳。for ...原创 2019-06-02 23:43:10 · 303 阅读 · 0 评论 -
python摘要算法简介
Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等。什么是摘要算法呢?摘要算法又称哈希算法、散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)。举个例子,你写了一篇文章,内容是一个字符串'how to use python hashlib - by Michael',并附上这篇文章的摘要是'2d73d4f15c0db7f...转载 2019-06-02 12:12:01 · 666 阅读 · 0 评论 -
CStringArray实现循环数组设计的FIFO
简要设计思路是:首先CStringArray中先设置数组大小(SetSize),相当于申请了一个普通数组,作为存储Item的容器,然后设计一个FIFO Queue,用来当作CStringArray的index获取数组的Item,同时通过比较Queue和Array的大小将Queue的头和尾适当调整指向,实现循环数组存取。#include "afxcoll.h"class FifoCStri...原创 2018-12-24 00:53:39 · 303 阅读 · 0 评论 -
【算法分析】排序算法:希尔、归并、快速、堆排序
排序算法排序是非常常用,非常基本的算法。排序的方法有很多,比如插入排序、选择排序、希尔排序、归并排序、快速排序、堆排序。本次试验重点实现:希尔排序、归并排序、快速排序、堆排序插入排序简单说就是每次选未排序的队列中最小的条目插入到已排序队列的最后:选择排序选择排序和插入有点像,是每次从拿未排序中的第一个条转载 2017-12-03 14:00:17 · 587 阅读 · 0 评论 -
二分查找法
二分查找法是将数据分割成两等份,再比较键值与中间值的大小,如果键值小于中间值,则可以确定要查找的数据在前半段,否则在后半段,如此分割多次直到找到或确定要找的数据不存在为止。由此可见,使用二分查找法的前提是数据已经事先排好序了。二分查找法适用于数据量不是非常大的(必须要能直接在内存中执行)且已经排好序的、不需要增删的静态数据。时间复杂度为O(log n),最多只需比较log₂n+1或log₂(n+1原创 2017-07-08 23:20:40 · 395 阅读 · 0 评论 -
递归算法
如果一个函数或程序,直接或间接地定义或调用自身,称为递归。在调用函数fn1过程中又要调用fn1函数叫直接调用;在调用fn1过程中要调用fn2,而在调用fn2过程中又要调用fn1,这是间接调用。递归往往能给我们带来非常简洁非常直观的代码形势,从而使我们的编码大大简化,然而递归的思维确实很我们的常规思维相逆的,我们通常都是从上而下的思维问题, 而递归趋势从下往上的进行思维。这样我们就能看到我们会用很少原创 2017-07-08 23:14:39 · 693 阅读 · 0 评论 -
转置矩阵
转置矩阵就是把原来矩阵的行坐标元素与列坐标元素相互调换,若A与A‘互为转换矩阵,则有A’[j,i] = A[i,j]。 m*n矩阵的转置算法:for (i = 0;i < m;i++) for(j = 0;j < n,j++) arrB[j][i] = arrA[i][j]#include using namespace std;int main(原创 2017-06-06 17:14:26 · 963 阅读 · 0 评论 -
矩阵加法
如果两个矩阵的行数和列数相等,则这两个矩阵可以进行加法运算,相加后得到的新矩阵的行数与列数和这两个矩阵也是相同的。 m*n矩阵加法运算:for(i = 0;i < im;i++) for(j = 0;j < in;j++) iarrC[i][j] = iarrA[i][j] + iarrB[i][j];#include using namespace std;原创 2017-06-06 19:12:31 · 2058 阅读 · 0 评论 -
矩阵相乘
如果两个矩阵A和B,符合条件A为一个m*n的矩阵,B为一个n*p的矩阵,则两个矩阵可以相乘,A*B的结果为一个m*p的矩阵C。C11 = A11*B11+A12*B21+......+A1n*Bn1...C1p = A11*B1p+A12*2p+......+A1n*Bnp...Cnp = Am1*B1p+Am2*B2p+......+Amn*Bnp#inc原创 2017-06-07 00:22:02 · 697 阅读 · 0 评论 -
单向链表创建与遍历
单向链表的节点基本由2个元素组成——数据字段和指针,前者存储数据,后者指向下一个元素的内存所在地址。在C++中动态创建单向链表,一般先定义一个类,类中包含数据字段和指针,该指针的类型与此类相同,作用就是指向下一个链表节点。设ptr为链表的读取游标,创建链表节点的C++算法是:1.ptr指向链表头;2.动态分配内存给新节点;3.将ptr指针指向新节点内存,表示这是新的链表尾部;4原创 2017-06-18 20:56:42 · 927 阅读 · 0 评论 -
用链表实现堆栈
堆栈(stack)是一组相同数据类型数据的集合,且拥有后入先出(last in first out)的特性,即堆栈的所有操作都是在顶端进行的。堆栈有五个基本操作:Create创建一个空堆栈。Push把数据压入堆栈顶端,并返回新堆栈。Pop从堆栈顶端弹出数据,并返回新堆栈。Empty判断堆栈是否为空堆栈,是空则返回tru原创 2017-06-18 22:12:27 · 1339 阅读 · 0 评论 -
稀疏矩阵的压缩矩阵
如果一个矩阵中的大部分元素为零,称为稀疏矩阵。对于稀疏矩阵而言,时间存储的数据项很少,如果在程序中使用传统的二维数组方式来存储,则十分浪费存储空间,且矩阵越大,资源浪费越严重。为提内存空间利用率,可利用三项式(3-tuple)的数据结构,即把一个非零项用(i,j,item_value)来表示。其中array(0,0)存储稀疏矩阵的总行数,array(0,1)存储稀疏矩阵的总列数,其中array(0原创 2017-06-08 23:46:46 · 802 阅读 · 1 评论 -
冒泡排序
冒泡排序适用于数据量小或有部分数据已经排过序,而且过程中为相邻两者相互比较和对调,并不会更改其原本排列的顺序,属于稳定排序法。最坏情况n个元素需要排n(n-1)/2次,时间复杂度为O(n^2);最好情况只需排一次时间复杂度为O(n)。空间复杂度佳。// BubbleSort.cpp : Defines the entry point for the console application./原创 2017-05-22 00:23:06 · 420 阅读 · 0 评论 -
用数组实现堆栈
堆栈(stack)是一组相同数据类型数据的集合,且拥有后入先出(last in first out)的特性,即堆栈的所有操作都是在顶端进行的。堆栈有五个基本操作:Create创建一个空堆栈。Push把数据压入堆栈顶端,并返回新堆栈。Pop从堆栈顶端弹出数据,并返回新堆栈。Empty判断堆栈是否为空堆栈,是空则返回true,原创 2017-06-12 00:23:11 · 3137 阅读 · 0 评论 -
顺序查找法
按数据大小来分,查找分为内部查找和外部查找,如果从另一角度分,又可分为静态查找和动态查找。 内部查找:数据量较小的文件,可以一次性全部加载到内存中进行查找。 外部查找:数据量大的文件,无法一次加载到内存中,需要使用辅助存储器来分次处理。 静态查找:在查找过程中,查找的表格或文件的内容不会被改动,如符号表查找。 动态查找:在查找原创 2017-07-08 17:34:01 · 1000 阅读 · 0 评论 -
插入排序
插入排序适用于少量元素的排序。// InsertionSort.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include #include #include /*for j = 2 to A.length key = A[j] //将A[j]插入到前面原创 2017-04-03 19:37:08 · 383 阅读 · 0 评论