算法
文章平均质量分 89
Eyizoha
打工人
展开
-
Python——Tchisla求解器(暴力搜索法)
最近玩到一个挺有意思的数字解密小游戏《Tchisla》,其规则类似算24点,也是利用一些数学运算和初始数字计算出目标数字,与算24点不同的是,Tchisla允许不限次数地使用一种初始数字(1~9),运算操作除了加减乘除外还包括了幂、平方根和阶乘,以及重复这个数字形成多位数(比如初始数字为7,那么777也可以使用)。原创 2024-02-28 19:03:26 · 1132 阅读 · 0 评论 -
C/C++、Python——迪杰斯特拉(Dijkstra)和弗洛伊德(Floyd)算法求最短路径及途经结点
效果1. C++int main() { vector<tuple<unsigned, unsigned, double>> es{ // 起点, 终点, 权重 {0, 3, 1}, {0, 4, 9}, {0, 6, 1}, {1, 3, 5}, {1, 5, 3}, {1, 6, 2}, {2, 5, 4}, {2, 6, 2},原创 2020-09-15 11:02:21 · 266 阅读 · 0 评论 -
数据结构、C/C++——实现一个STL风格的简单二叉树类模板,支持先中后层序遍历以及根据遍历重建二叉树方法
简介简单的二叉数类,支持结构化字符串和中序遍历+任意一种其他遍历方式来建立一颗STL风格的二叉树。所谓结构化字符串,即以ROOT[(LEFT[,RIGHT])]来表示一个节点和其左右子树结构,无右子树可省略逗号,无子树可省略括号,如0(1(,2),3(4,5(6(7,8),9)))中根节点为0,左子树为1(,2),右子树为3(4,5(6(7,8),9))。结构如下:测试代码int main(){ BinTree<string> bts("0(1(3,4),2(5,6))", vec原创 2020-09-08 21:23:29 · 528 阅读 · 0 评论 -
数据结构、Python——实现一个Python风格的简单二叉树类,支持先中后层序遍历以及根据遍历重建二叉树方法
简介简单的二叉数类,支持结构化字符串和中序遍历+任意一种其他遍历方式来建立一颗Python风格的二叉树。所谓结构化字符串,即以ROOT[(LEFT[,RIGHT])]来表示一个节点和其左右子树结构,无右子树可省略逗号,无子树可省略括号,如0(1(,2),3(4,5(6(7,8),9)))中根节点为0,左子树为1(,2),右子树为3(4,5(6(7,8),9))。结构如下:代码测试代码测试效果...原创 2020-09-04 21:38:42 · 203 阅读 · 0 评论 -
Python——任意正数任意进制转换(支持2~36进制和小数)
效果代码1.字母和数字转换A↔10,B↔11,...,Z↔35A↔10,B↔11,...,Z↔35A↔10,B↔11,...,Z↔35def trans(num): # 输入数字换为字母或输入字母转换为数字 if type(num) == int: if num < 10: return str(num) else:...原创 2019-07-06 21:28:57 · 7445 阅读 · 3 评论 -
算法、Python——寻路算法(最小代价路径、最短时间路径)
如何花费最短的时间到达目的地?如何在一个不规则的迷宫中找到出路?如何在一片起伏不平的地形中找出出发点到目的点的最佳路径?原创 2019-05-06 16:45:22 · 6003 阅读 · 0 评论 -
算法、Python——如何将数字序列映射为整数
背景如何只调用一次rand()就实现洗牌算法(将一个列表随机打乱顺序)?考虑一串长度为n的数字序列[0,1,2,3,…,n-1],其的不同排列顺序共有n!种,其包含的信息量为I=log(n!),也就是说存在一种方法能将所有排序的序列一一映射到[0,n!-1]上的整数。那num2order(rand()%n)就能实现洗牌算法了!原理1.阶乘进制首先介绍一下阶乘进制。就如同2进制、10进制、...原创 2019-04-20 14:16:47 · 2911 阅读 · 0 评论 -
Python——迷宫生成和迷宫破解算法
迷宫生成1.随机PRIM思路:先让迷宫中全都是墙,不断从列表(最初只含有一个启始单元格)中选取一个单元格标记为通路,将其周围(上下左右)未访问过的单元格放入列表并标记为已访问,再随机选取该单元格与周围通路单元格(若有的话)之间的一面墙打通。重复以上步骤直到列表为空,迷宫生成完毕。这种方式生成的迷宫难度高,岔口多。效果:代码:import randomimport numpy as np...原创 2019-04-19 19:53:53 · 8030 阅读 · 5 评论 -
C/C++——元胞自动机&万花筒
程序功能实现一个简单的元胞自动机,可以自定义初始状态、运行规则。以此基础实现一个能自动绘制大量万花筒图像的程序。效果生命游戏中的“滑翔机(gliders)”:万花筒:代码#include <windows.h>#include <stdlib.h>#include <conio.h>#include <string>#inclu...原创 2019-04-19 15:29:57 · 2327 阅读 · 0 评论 -
C/C++——如何使用PlaySound同时播放两个声音
PlaySound是Windows用于播放音乐的API函数。在vs2010以上版本需要加入#pragma comment(lib, “winmm.lib”)才能使用PlaySound(或者在构建选项的连接中添加winmm)。PlaySound函数原型为 BOOL PlaySound(LPCSTR pszSound, HMODULE hmod,DWORD fdwSound)。参数pszSoun...原创 2019-04-19 13:59:59 · 9452 阅读 · 7 评论 -
C/C++——如何在控制台中绘制进度条
函数功能:输入一个0~1的double p,在控制台中当前光标位置开始使用当前字符颜色绘制对应长度的进度条。void gotoxy(int x,int y){ COORD pos; pos.X=x; pos.Y=y; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);}void dra...原创 2019-04-19 12:53:28 · 2111 阅读 · 1 评论 -
Python——numpy实现简单BP神经网络识别手写数字
直接上代码:1.核心代码:神经网络以及BP算法import numpy as npfrom tqdm import trange # 替换range()可实现动态进度条,可忽略def sigmoid(x): # 激活函数采用Sigmoid return 1 / (1 + np.exp(-x))def sigmoid_derivative(x): # Sigmoid的导数...原创 2019-04-23 21:57:20 · 12126 阅读 · 86 评论 -
算法——音乐播发器中考虑已听次数的随机播放算法
背景绝大多数音乐播放器的随机播放算法都采用洗牌算法(Shuffle),即将歌单中所有歌随机打乱顺序播放。但是考虑到用户在软件的使用过程中会不断往歌单中添加新的歌曲,在洗牌算法中无论新歌旧歌都会无差别地随机打乱,如此生成的随机列表没有照顾到用户想更多听新歌的想法。本文旨在提出能够在随机播放过程中考虑不同歌曲已听次数的随机播放算法。该算法应该有如下几条原则:已听次数越低的歌应有越高的几率被播放;...原创 2019-04-18 20:31:44 · 1437 阅读 · 0 评论 -
C/C++——计算矩阵的行列式
#include<stdio.h>#include<stdlib.h>double det(double **D,int n) //输入代表矩阵的二维数组、矩阵阶数,返回矩阵的行列式{ double d=0; // 一阶二阶直接计算 if(n==1)d=D[0][0]; if(n==2)d=D[0][0]*D[1][1]-D[0][1]*D[1][0];...原创 2019-04-18 12:44:14 · 9345 阅读 · 0 评论 -
Python——计算序列相似度的算法(包括求最少交换步骤,最小交换距离)
程序功能计算如何衡量两个数字序列之间的相似度中提及的相似度指标;求两个序列转换的最少交换步骤和最小交换距离。代码位方差(location square deviation, LSD)def location_square_deviation(lst_1, lst_2=None): n = len(lst_1) lst = lst_1.copy() if lst_...原创 2019-04-22 21:45:41 · 4882 阅读 · 2 评论 -
算法——如何衡量两个数字序列之间的相似度
背景给定两个等长的数字序列,如何衡量他们之间的相似程度?如[2,1,0,3][2, 1, 0, 3][2,1,0,3]、[2,0,3,1][2, 0, 3, 1][2,0,3,1]与[1,3,2,0][1, 3, 2, 0][1,3,2,0]三个序列之间哪两个最相似?为了解决上述问题,本文提出了两类共六种衡量指标用来衡量序列相似度。指标符号约定nnn:序列长度PPP:数字序列[0,1...原创 2019-04-22 21:00:48 · 21499 阅读 · 12 评论