![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
千瞱
世界上没有完美的程序,但我们并不因此而沮丧,因为写程序本来就是一个不断追求完美的过程。
展开
-
迷宫生成算法总结
最近闲来无事想做一个质量高一点的进阶版的迷宫小游戏,首先就要先生成最基础的迷宫地图,因此学习并整理了一下迷宫生成算法。由于python更容易实现这些算法,因此首先使用pyhon将各种生成算法整理一遍,之后再用Qt或者javascript重写一遍,再加上可视化。大概了解了一下,生成迷宫的算法主要有三种思路,其中最小生成树算法又可以分为选点法(prim)和选边法(kruskal):随机深度优先算...原创 2020-01-31 11:06:54 · 5274 阅读 · 3 评论 -
Python干货整理之数据结构篇
1 stack的实现实现接口:init() 用于初始化stack,数据类型为list size() 用于获得stack的大小 push() 用于往栈中添加元素,添加的元素类型可以是int或者list top()获取栈顶元素 pop() 弹出并返回栈顶元素 print_stack() 打印栈class Stack(object): def __init__(self):...原创 2019-10-30 12:55:59 · 367 阅读 · 0 评论 -
动态规划系列(5)——类24点游戏
给定一个数组如A=[3, 34, 4, 12, 5, 2],再给定一目标数字S。现要求判断在A中能否找到m个数字,使其和等于S,若可以找到这样的数字,返回True,否则返回false。分析:首先不可否认,这是一道可以使用回溯解决的问题,如果使用回溯,这个问题的时间复杂度为2^n,anyway, 我们先使用回溯实现一下练练手:import numpy as npA = [3, ...原创 2019-05-16 09:47:40 · 921 阅读 · 0 评论 -
动态规划系列(4)——不相邻数最大和
给定数组A=[1,2,4,1,7,8,3],求出数组A中互不相邻的数的最大和。例如:如果选择了8,则不能选择7和3,在本例中最大的和为1+4+7+3=15分析,这是一道典型的使用动态规划求解的题目(当然能够使用万能的回溯法,但显然不是很棒),最优子结构为:f(i)=max{f(i - 2) + A[i], f(i - 1)}解释一下,对于第i位,如果选择A[i],则不能选择i...原创 2019-05-16 08:55:36 · 6261 阅读 · 4 评论 -
动态规划系列(3)——爬楼梯
LeetCode 70: Climbing Stairs [★☆☆☆☆]假设你现在正在爬楼梯,楼梯有 n 级(1≤n≤50)。每次你只能爬 1级或者 2级,那么你有多少种方法爬到楼梯的顶部?第一步,得到递推关系式:C[i] = C[i-1] + C[i-2],你会发现,这不就是斐波那契数列么,详见动态规划入门斐波那契数列第二步,边界条件:C[0] = 0, C[1] = 1, C[...原创 2019-05-10 13:24:49 · 1971 阅读 · 0 评论 -
动态规划系列(2)——01背包问题的动态规划解法
问题:有n 个物品,它们有各自的重量和价值,现有给定容量的背包,如何让背包里装入的物品具有最大的价值总和?/* * Dynamic Programming : 0-1 package problem */#include <iostream>#include <vector>#include <memory.h>using names...原创 2019-05-10 12:06:37 · 748 阅读 · 0 评论 -
动态规划系列(1)——动态规划入门
一般的,我们常用的解决问题的方法有暴力解决法、分而治之、二分法、贪心法和动态规划法。在你遇到一个问题怎么想都想不出其解法的时候,很可能就需要用到动态规划了;在你的题目中出现最优、最多、最好等字眼的时候,很可能可以使用动态规划问题来解决了。那么什么是动态规划(Dynamic Programming)呢?动态规划和分治思想、递归有着千丝万缕的关系。简单来说,分治思想是把一个问题分成一个一个的互不相...原创 2018-08-01 16:47:32 · 6585 阅读 · 3 评论 -
递归问题之八皇后问题
八皇后问题:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。解决思路:仔细分析这个问题,发现为了满足要求每一次放置棋子的时候肯定要放置在不同行,那么可以将问题简化为:从第一行开始,第一次将棋子放在第一行的某个位置,第二次放在第二行的某个位置...以此类推,那么第八次将棋子放在第八行的某个位置(如果存在这个位置的话)。因此...原创 2018-07-27 21:57:56 · 379 阅读 · 0 评论 -
数据结构之二叉树的所有遍历算法C++实现(递归和非递归)
定义头文件:BinTree.h#pragma once#include <iostream>#include <vector>#include <queue>#include <stack>using namespace std;template <class NodeType>struct TreeNode {...原创 2018-06-06 17:27:48 · 1705 阅读 · 0 评论 -
用邻接表建立图
#include <iostream>#include <stdlib.h>using namespace std;#define MaxVertexNum 100typedef int VertexType;typedef int EdgeType;//邻接矩阵表示 typedef struct MGraph{VertexType Vex[Max...原创 2018-03-19 22:27:53 · 988 阅读 · 0 评论 -
TSP(货郎担问题)解决方案:遗传算法求解近似最优解
一、 实验题目 有 n 个城市,用 1,2,…,n 表示,城 i,j 之间的距离为 dij,有一个货郎从城 1 出发到其他城市一次且仅一次,最后回到城市 1,怎样选择行走路线使总路程最短?二、 题目分析 在开始这个实验题目之前,我查找过很多这方面的资料,货郎担问题(TSP 问题)是一个组合优化问题。该问题可以被证明具有 NPC 计算复杂性。因此,单纯的从以往通过数据结构的方法解决这个问题是不现实的...原创 2018-03-16 16:47:22 · 9018 阅读 · 0 评论 -
数据结构之二叉树的建立与遍历(C语言版)
只实现了二叉树的先序方式建立和三种遍历方法。原创 2017-08-26 13:01:34 · 1679 阅读 · 0 评论 -
数据结构之双链表的C语言实现
在写过单链表之后再来写双链表会发现,双链表和单链表在实现上的主要区别在于:双链表每个节点需要考虑她的前驱和后继,因此在插入和删除操作的时候就需要格外注意对链表最后一个元素的操作,因为最后一个元素的next指向的是NULL,所以在写插入和删除操作的时候需要判断是不是对最后一个节点操作。原创 2017-08-24 22:24:13 · 435 阅读 · 0 评论 -
数据结构之单链表的C语言实现
使用C语言实现的单链表基本功能。通过动态分配内存的方式实现了单链表原创 2017-08-22 22:40:00 · 675 阅读 · 0 评论 -
Fibonacci sequence两种实现算法及其复杂度分析
Fibonacci问题:f(0) = f(1) = 1; 对于n≥2,f(n) = f(n - 1) + f(n - 2)递归和非递归算法的复杂度分析原创 2017-08-18 11:14:05 · 495 阅读 · 0 评论 -
最大子列和问题的不同实现算法
四种最大子列和问题的算法的时间复杂度分析原创 2017-08-17 23:47:30 · 595 阅读 · 0 评论 -
散列表/哈希表的基础知识(上)
散列的基本概念【例子】现有11个数,分别是18,23,11,20,2,7,27,30,42,15,34。现定义一个函数h(key) = key mod 17。分别把这11个数存储到大小为17的整型数组(散列表)中。其结果为:散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表原创 2016-08-16 20:44:44 · 583 阅读 · 0 评论