
数据结构与算法
文章平均质量分 75
学习&实践爱好者
学习&实践爱好研究者,知识桥建设者,热衷于探索实践提高学习和认知效能,文风力求严谨详实、深入浅出,助力自律自励者提升学习技能与认知效果!
展开
-
欧几里得算法求两个整数的最大公约数介绍(C++实现)
欧几里得算法求两个整数的最大公约数介绍(C++实现)原创 2023-09-01 21:45:00 · 2172 阅读 · 0 评论 -
C++实现链表
C++实现链表。本文介绍两种实现方法:一、使用指针自定义实现;二、使用C++ STL(标准模板库)中的list容器实现。原创 2023-02-21 20:37:25 · 5867 阅读 · 1 评论 -
JavaScript中怎么实现链表?
在 JavaScript中怎么实现链表呢?原创 2023-02-20 21:45:00 · 1374 阅读 · 0 评论 -
Java中的链表实现介绍
Java中的链表实现介绍。本文仅以单链表为例介绍。采用两种方式实现:一、使用Java.util 包的LinkedList类实现;二、自定义实现类实现。原创 2023-02-18 20:13:43 · 1758 阅读 · 0 评论 -
Python实现链表介绍
C语言是通过指针将节点连接成链表和树结构的。Python没有指针怎么实现链表?本文以最简单的单链表为例介绍。原创 2023-02-17 21:45:00 · 2951 阅读 · 0 评论 -
顺序查找和二分查找算法多种编程语言实现(修订)
查找,也可称检索,是在多个信息中寻找一个特定的信息元素,在此介绍顺序查找和二分查找算法的多种编程语言实现。给出C++代码、Java代码、Python代码和JavaScript代码。原创 2023-01-10 19:31:57 · 744 阅读 · 1 评论 -
百钱百鸡算法多种编程语言实现
百钱百鸡算法多种编程语言实现:C++代码、Python代码、Java代码和JavaScript代码原创 2023-01-03 21:15:00 · 1397 阅读 · 0 评论 -
将一个分数拆为两个不同的单位分数之和c++算法源码
将一个分数拆为两个不同的单位分数之和,c++原创 2022-02-25 22:00:00 · 2469 阅读 · 0 评论 -
算法的复杂度介绍
对于同一个问题,使用不同的算法,也许最终得到的结果是一样的,但在过程中消耗的资源和时间却会有很大的区别。那么我们应该如何去衡量不同算法之间的优劣呢?主要还是从算法所占用的“时间”和“空间”两个维度去衡量。原创 2023-03-08 20:18:51 · 2896 阅读 · 0 评论 -
算法基础系列
算法基础系列(C++示例),本系列文章,有许多是我早期学习笔记,有部分篇章几乎需要重写,有些篇章借鉴了网上的公开资料。作者力求系统准确,从初学者角度深入浅出介绍,但难免存在失误、述说不确切,欢迎读者指正,我将尽快改正。本系列C++示例都是可以运行的,从目前国内中学信息学竞赛主要使用Dev-C++角度,我的调试环境是Dev-C++。原创 2021-09-03 22:00:05 · 960 阅读 · 0 评论 -
算法基础之排序
算法基础之排序(C++示例)排序算法(Sorting algorithm)简称排序(Sort)是一种能将一组特定的数据按某种顺序进行排列的算法。排序算法多种多样,常见的内部排序算法有:插入排序(Insertion sort)、希尔排序(Shell sort)、选择排序(Selection sort)、冒泡排序(Bubble sort)、归并排序(merge sort)、快速排序(Quick sort)、堆排序(Heap sort)、基数排序(Radix sort)、计数排序(Counting sort)原创 2021-09-01 20:48:56 · 498 阅读 · 0 评论 -
算法基础之分支限界
算法基础之分支限界(C++示例)分支限界(branch and bound)法与回溯法类似,但是回溯法是求解目标中所有满足约束条件的解,而分支限界法是找出满足约束条件的一个解,最优。所谓“分支”是采用广度优先的策略,依次生成扩展结点的所有分支(即:儿子结点)。所谓“限界”是在结点扩展过程中,计算结点的上界(或下界),边搜索边减掉搜索树的某些分支,从而提高搜索效率。回溯法和分支限界法的一些区别回溯法深度优先搜索堆栈活结点的所有可行子节点被遍历后,才被从栈中弹出找出满足约束条件的所有原创 2021-09-03 06:25:49 · 3101 阅读 · 0 评论 -
算法基础之模拟
模拟(simulate)就是用计算机来模拟题目中要求的操作。题目1给定两个整数A和B,输出他们的和。题目要你算A+B,你就算,这就是模拟。代码如下:#include<iostream>using namespace std;int main(){ int a,b; cout<<"请输入两个整数(空格分隔):"; cin>>a>>b; cout<<"和为:"<<a+b<&l原创 2021-08-30 21:17:58 · 2190 阅读 · 0 评论 -
算法基础之递推
算法基础之递推(C++示例)所谓递推,是指从已知的初始条件出发,依据某种递推关系,逐次推出所要求的各中间结果及最后结果。其中初始条件或是问题本身已经给定,或是通过对问题的分析与化简后确定。从已知条件出发逐步推到问题结果,此种方法叫顺推。从问题出发逐步推到已知条件,此种方法叫逆推。无论顺推还是逆推,其关键是要找到递推式。这种处理问题的方法能使复杂运算化为若干步重复的简单运算,充分发挥出计算机擅长于重复处理的特点。递推法是一种重要的数学方法,在数学的各个领域中都有广泛的运用,也是计算机用原创 2021-08-27 06:39:28 · 3196 阅读 · 0 评论 -
算法基础之动态规划
算法基础之动态规划(C++示例)动态规划(Dynamic Programming)指的是通过把一个问题递归拆解成更加简单的子问题的方式简化一个复杂问题。在计算机科学中,如果一个问题可以通过先拆解成简单子问题,寻递归找到每个子问题的最优解,这样我们就可以认为这个问题存在最优子结构。动态规划与分治法的区别是:从分治法的视角来看,每个子问题必须相互独立;但在多轮决策中,这个假设显然不成立,而多轮决策就用到了动态规划方法。从数学的视角来看,动态规划是一种运筹学方法,是在多轮决策过程中的最优方法。原创 2021-08-24 22:42:33 · 361 阅读 · 0 评论 -
算法基础之递归
算法基础之递归递归(Recursion),指一种通过重复将问题分解为同类的子问题而解决问题的方法。或者说递归算法是一种直接或者间接地调用自身的算法。简单来说就是一个方法中会重复调用该方法解决问题,直到满足基础部分的条件而输出终止的算法。特点(1).递归就是在过程或函数里调用自身。(2).使用递归算法必须有一个明确的递归结束条件,即递归出口。经典案例:计算阶乘一个正整数的阶乘(factorial)是所有小于及等于该数的正整数的积,并且0的阶乘为1。自然数n的阶乘写作n!。1808年原创 2021-08-21 21:03:44 · 667 阅读 · 0 评论 -
算法基础之回溯
算法基础之回溯回溯法(BackTracking)也叫试探法,是一种选优搜索法,按选优条件向前搜索,以达到目标。若探索到某一步,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。回溯算法类似于枚举的过程,当搜索时遇到不满足条件,回退到上一个,尝试别的路径。回溯法从问题本身出发,寻找可能实现的所有情况。和穷举法的思想相近,不同在于穷举法是将所有的情况都列举出来以后再一一筛选,而回溯法在列举过程如果发现当前情况根本不原创 2021-08-23 21:02:58 · 432 阅读 · 0 评论 -
算法基础之贪心
贪心算法(greedy algorithm),是用计算机来模拟一个“贪心”的人做出决策的过程。这个人十分贪婪,每一步行动总是按某种指标选取最优的操作。贪心算法,又名贪婪法,是寻找最优解问题的常用方法,这种方法模式一般将求解过程分成若干个步骤,但每个步骤都应用贪心原则,选取当前状态下最好/最优的选择(局部最有利的选择),并以此希望最后堆叠出的结果也是最好/最优的解。贪心算法的基本思路: 1.建立数学模型来描述问题。 2.把求解的问题分成若干个子问题。 3.对每一子问题...原创 2021-08-19 20:48:55 · 4623 阅读 · 1 评论 -
算法基础之枚举
算法基础之枚举枚举枚举(Enumerate)是基于已有知识来猜测答案的一种问题求解策略。枚举的思想是不断地猜测,从可能的集合中一一尝试,然后再判断题目的条件是否成立。枚举的时候要想清楚:可能的情况是什么?要枚举哪些要素?例题一个数组中的数互不相同,求其中和为0的数对的个数。//一个数组中的数互不相同,求其中和为0的数对的个数#include<stdio.h>int main(){int a[10] = {10,-10,-20,3,5,-6,7,0,20,-3};int i原创 2021-08-16 20:53:19 · 597 阅读 · 0 评论 -
算法基础之字符串
算法基础之枚举枚举枚举(Enumerate)是基于已有知识来猜测答案的一种问题求解策略。枚举的思想是不断地猜测,从可能的集合中一一尝试,然后再判断题目的条件是否成立。枚举的时候要想清楚:可能的情况是什么?要枚举哪些要素?例题一个数组中的数互不相同,求其中和为0的数对的个数。//一个数组中的数互不相同,求其中和为0的数对的个数#include<stdio.h>int main(){ int a[10] = {10,-10,-20,3,5,-6,7,...原创 2021-08-16 20:47:09 · 556 阅读 · 0 评论 -
算法基础之分治
算法基础之分治分治(Divide and Conquer),字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。主要思想:当要处理的数据非常多的时候,可以将众多问题先分解成几个小问题,找到求出这几个小问题的方法之后,再找到合适的方法,将子问题解,组合成求整个问题的解法。按照这个思想,如果子问题还是很大的时候,继续将子问题分成更小的子子问题,来进行求解,以此类推,直至可以直接将解求出为止。这个技巧是很多高效算法原创 2021-08-20 21:41:10 · 214 阅读 · 0 评论 -
数据结构和算法概述
数据结构和算法概述。数据结构(data structure)用于解决数据存储问题,而算法(algorithm)用于处理和分析数据,数据结构和算法存在“互利共赢、1+1>2”的关系。在解决问题的过程中,数据结构要配合算法选择最优的存储结构来存储数据,而算法也要结合数据存储的特点,用最优的策略来分析并处理数据,由此可以最高效地解决问题。原创 2021-08-10 21:42:15 · 1272 阅读 · 0 评论 -
Java算法入门
Java算法入门插入排序插入排序(Insertion Sort)是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。基本思想:把n个待排序的元素看成一个有序表和一个无需表,开始的时候有序表只有1个元素,无序表中有n-1个元素;每次从无序表中取出第一个元素,将它插入到有序表中,使之成为新的有序表,重复n-1次完成整个排.原创 2020-12-31 17:00:49 · 381 阅读 · 0 评论 -
python算法入门
排序排序算法很多,常见的排序算法:冒泡排序、选择排序、插入排序、归并排序、快速排序、希尔排序、堆排序、计数排序、桶排序、基数排序的思想,在此介绍两种比较好懂的算法。冒泡排序冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。冒泡排序算法的运作如下:比较相邻的元...原创 2020-11-22 15:44:49 · 2986 阅读 · 1 评论 -
JavaScript算法入门
JavaScript数据结构和算法入门数组——最简单的内存数据结构在很多编程语言中,数组的长度是固定的,当数组被填满时,再要加入新元素就很困难。Javascript 中数组不存在这个问题。在很多编程语言中,数组存储一系列同一种数据类型的值,Javascript 中不存在这种限制。JavaScript中的数组参见https://www.runoob.com/jsref/jsref-obj-array.html排序算法插入排序(Insertion-Sort)的算法描述是一种简..原创 2020-11-22 10:12:11 · 618 阅读 · 0 评论 -
C++之算法入门
C++之算法入门:本文介绍:最大公约数和最小公倍数、单链表、直接插入排序,作为抛砖引玉吧。一、最大公约数和最小公倍数原创 2020-11-15 10:01:26 · 2971 阅读 · 0 评论 -
递归算法与汉诺塔
递归算法与汉诺塔递归算法(英语:recursion algorithm)在计算机科学中是指一种通过重复将问题分解为同类的子问题而解决问题的方法。递归算法是一种直接或者间接调用自身函数或者方法的算法。运用递归的条件:每一步进行的操作基本相同,并且问题规模逐渐减小。递归的过程递归,顾名思义,其包含了两个意思:递 和 归,这正是递归思想的精华所在。递归就是有去(递去)有回(归来),用递归求4!如下图所示:用递归求阶乘的python代码def fun(n): if n =...原创 2020-06-01 17:39:59 · 379 阅读 · 0 评论 -
判断素数的算法的说明
判断素数的算法的说明给定一个整数x,判断x是否为素数。算法基本思路如下:让x被2到sqrt(x)除,如果x能被2至sqrt(x)之中任何一个整数整除,那么说明x不是质数,否则是质数。c语言代码如下:#include <cmath>bool IsPrime(int x){ for(int i = 2; i <= (int)sqrt(x); i++) { if((x % i) == 0) re...原创 2020-05-30 21:12:25 · 893 阅读 · 0 评论