算法

算法训练——数的统计

半城伤御伤魂 提交于 2020-01-31 14:30:53
//数的统计 #include<stdio.h> #include<stdlib.h> int comp(const void *a,const void *b){ return *(int*)a - *(int*)b; } int main(){ int i,N,num=0; scanf("%d",&N); int a[2][N]; for(i=0;i<N;i++) scanf("%d",&a[0][i]); qsort(a[0],N,sizeof(int),comp); num = a[0][0]; a[1][0] = 1; for(i=1;i<N;i++){ if(a[0][i] == a[0][i-1]) a[1][i] = a[1][i-1] + 1; else{ printf("%d %d\n",a[0][i-1],a[1][i-1]); a[1][i] = 1; } } printf("%d %d",a[0][N-1],a[1][N-1]); return 0; }    来源: https://www.cnblogs.com/Hqx-curiosity/p/12245207.html

Java垃圾回收之复制算法详解

本小妞迷上赌 提交于 2020-01-31 13:41:25
转载自:https://www.jb51.net/article/149608.htm 概述 如果jvm使用了coping算法,一开始就会将可用内存分为两块,from域和to域, 每次只是使用from域,to域则空闲着。当from域内存不够了,开始执行GC操作,这个时候,会把from域存活的对象拷贝到to域,然后直接把from域进行内存清理。 应用场景 coping算法一般是使用在新生代中,因为新生代中的对象一般都是朝生夕死的,存活对象的数量并不多,这样使用coping算法进行拷贝时效率比较高。 jvm将Heap 内存划分为新生代与老年代,又将新生代划分为Eden(伊甸园) 与2块Survivor Space(幸存者区) ,然后在Eden –>Survivor Space 以及From Survivor Space 与To Survivor Space 之间实行Copying 算法。 不过jvm在应用coping算法时,并不是把内存按照1:1来划分的,这样太浪费内存空间了。一般的jvm都是8:1。也即是说,Eden区:From区:To区域的比例是 8:1:1 始终有90%的空间是可以用来创建对象的,而剩下的10%用来存放回收后存活的对象。 1、当Eden区满的时候,会触发第一次young gc,把还活着的对象拷贝到Survivor From区;当Eden区再次触发young

排序算法

自闭症网瘾萝莉.ら 提交于 2020-01-31 12:28:24
排序算法 1.冒泡排序 public static void bubbleSort(int[] arr) { if (arr == null || arr.length < 2) { return; } for (int e = arr.length - 1; e > 0; e--) { for (int i = 0; i < e; i++) { if (arr[i] > arr[i + 1]) { swap(arr, i, i + 1); } } } } public static void swap(int[] arr, int i, int j) { arr[i] = arr[i] ^ arr[j]; arr[j] = arr[i] ^ arr[j]; arr[i] = arr[i] ^ arr[j]; } 2.插入排序 public static void insertionSort(int[] arr) { if (arr == null || arr.length < 2) { return; } for (int i = 1; i < arr.length; i++) { for (int j = i - 1; j >= 0 && arr[j] > arr[j + 1]; j--) { swap(arr, j, j + 1); } } } public static

机器学习算法中的blending和stacking到底有什么区别

大憨熊 提交于 2020-01-31 11:15:49
机器学习算法中的blending和stacking到底有什么区别 关于blending和stacking的区别很多人不是很清楚,一些文章也没有讲清楚甚至有一些错误。blending较stacking的主要区别在于,blending选取特定比例的数据作为验证集(比如5%,20%等等),其余作为训练集,而stacking使用交叉验证,分别将不同的部分数据作为验证集和训练集,这意味着: blending每次只训练一个模型,而stacking训练模型数和交叉验证折数相关; blending训练时训练集和验证集是确定不变的,stacking则是通过交叉验证使得所有数据都做过验证集。 来源: CSDN 作者: L___yh 链接: https://blog.csdn.net/qq_31370935/article/details/104118796

[算法]parition求TopK

别来无恙 提交于 2020-01-31 08:42:19
parition算法是用于解决TopK问题代价最小的算法之一 时间O(n) 空间O(1) 算法流程: 引入随机化选取一个枢轴并与尾元素交换 将区间内元素排为小于枢轴在前,大于枢轴在后的形式 使得i-lst大于等于枢轴 比较i与k大小递归处理 返回元素 class Solution { public: int findKthLargest(vector<int>& nums, int k) { int fst = 0, lst = nums.size() - 1; k = lst - k + 1; while(fst <= lst) { int pos = fst + ( rand() % (lst - fst + 1) ); swap(nums[lst], nums[pos]); int i = fst, j = fst; while(j < lst) { if(nums[j] <= nums[lst]) swap(nums[i++], nums[j]); ++j; } swap(nums[i], nums[j]); if(i == k) { break; } else if(i > k) { lst = i - 1; } else { fst = i + 1; } } return nums[k]; } }; 来源: CSDN 作者: Zeolim 链接: https:/

java冒泡排序算法

给你一囗甜甜゛ 提交于 2020-01-31 08:22:15
import java . util . Random ; public class Test1 { public static void main ( String [ ] args ) { int [ ] list = new int [ 50 ] ; int temp = 0 ; Random random = new Random ( ) ; for ( int j = 0 ; j < list . length ; j ++ ) list [ j ] = random . nextInt ( 100 ) ; for ( int i = 0 ; i < list . length - 1 ; i ++ ) { for ( int k = i + 1 ; k < list . length ; k ++ ) { if ( list [ i ] > list [ k ] ) { temp = list [ i ] ; list [ i ] = list [ k ] ; list [ k ] = temp ; } } } System . out . println ( "\n通过冒泡排序法的结果:\n" ) ; for ( int i = 0 ; i < list . length ; i ++ ) System . out . print ( list [ i ] + " "

论文笔记——Contextual Multi-armed Bandit Algorithm for Semiparametric(半参数) Reward Model

丶灬走出姿态 提交于 2020-01-31 05:35:16
Contextual Multi-armed Bandit Algorithm for Semiparametric(半参数) Reward Model 摘要: 事实证明,上下文多臂匪徒(MAB)算法有望在顺序决策任务(例如新闻推荐系统,网页广告放置算法和移动健康)中最大化累积reward。但是,大多数提出的上下文MAB算法都假定奖励和行为上下文之间存在线性关系。本文针对支持非平稳性的松弛,半参数奖励模型提出了一种新的上下文MAB算法。与考虑相同模型的两个替代算法相比,所提出的方法具有更少的限制,更易于实现且速度更快,同时实现了严格的后悔上限。 即提出一种新型MAB算法(宽松、半参数的reward模型)——支持非平稳态 一、introduction MAB问题会公式化顺序决策问题——选择action(arm),最后最大化积累的rewards 不断选择一个arm,同时收到对应的rewards,学习者会学习和收集信息,然后积累信息,最后根据现有的信息去选择最优的arm 之前的算法都是假设reward的期望和上下文具有是不变线性关系———会严格限制现实中reward的定义 本文中, 提出新型的上下文MAB算法——对rewards的分布会有宽松的假设 该假设可以针对不稳定性的reward包含 加法截距项 +原来的 时不变线性项 );该截距项随时间变化,但不取决于action ####

~ 如何用C++自制一个日麻游戏 ~ 概述

不打扰是莪最后的温柔 提交于 2020-01-31 05:25:24
前言 以前因为不信任某麻将的随机牌山算法,于是想自己做一个试试【结果就在探索随机种子上越走越偏,最后做成了一款 半吊子 的麻将。自认为在判断听牌的算法上有所创新。 所以敬请期待吧23333 我认为日麻算法主要有三个阶段(难点): 1. 大体框架构建 2. 听牌判断算法 3. 番、符数的计算 4. 界面设计(SDL) ! 要素注意 ! 1. C++编写 2. 日本四人麻将 1 (振听、立直、符等特殊规则) 3. Visual Studio 2 最新版开发(目前是2019) 4. SDL 2.0 3 的可视化界面 5. 尽可能多的 C++11 标准的写法 6. 一大堆口胡注释 8. 轻微强迫症 9. 弱鸡水平 10. 想到再加 原创文章,转载请标明出处,如有谬误欢迎各位指正 欢迎交流麻将算法,QQ:2639914082 日本麻将百科 ↩︎ Visual Studio (VS) 官网 ↩︎ Simple DirectMedia Layer (SDL) 官网 ↩︎ 来源: CSDN 作者: 扑克桑 链接: https://blog.csdn.net/qq_44637852/article/details/104114280

在矩形范围内种怪的算法问题

牧云@^-^@ 提交于 2020-01-31 05:07:53
今天在工作中遇到这样一个问题:给定1个矩形,左下角的点point(x, y),长w,高h,要在这个矩形里随机出n个不同的点用来种怪。这个算法该怎么写呢?这对于我来说确实成为了一个问题。图示如下: 由于任务时间紧,做的又是Demo的原因,我不假思索的写出了下面这个算法: //从[from, to]区间中随机一个整数 function randomInt (from, to) { //方法实现就不写了 }function randomCoords (point, w, h, n) { //目的数组 var coords = []; var map = {}; var count = n; if ((w + 1) * (h + 1) < n) { count = (w + 1) * (h + 1); } while (count > 0) { var x = randomInt(point.x, point.x + w); var y = randomInt(point.y, point.y + h); //已经随机出该点,就丢掉 if (map[x] && map[x][y]) continue; if (!map[x]) map[x] = {}; map[x][y] = true; coords.push({x:x, y:y}); count --; } return coords;

算法竞赛入门经典训练指南

空扰寡人 提交于 2020-01-31 04:57:17
最近在看算法竞赛入门经典训练指南这本书,书中不错的算法我将在博客中发布,和大家共同学习。 题目: 在你的王国里有一条n个头的恶龙,你希望雇一些骑士把它杀死(即砍掉所有头)。村里有m个骑士可以雇佣,一个能力值为m的骑士可以砍掉一个直径不超过x的头,且需要支付x个金币。如何雇佣骑士才能砍掉恶龙的所有头,且需要支付的金币最少?注意,一个骑士只能砍一个头(且不能被雇佣两次)。 输入格式: 输入包含多组数据。每组数据的第一行为正整数m和n(1<=m,n<=20 000);以下m行每行为一个整数,即恶龙每个头的直径;以下n行每行为一个整数,即每个骑士的能力。输入结束标志为m=n=0。 输出格式: 对于每组数据,输出最少花费。如果无解,输出"Loowater is doomed!"。 样例输入: 2 3 5 4 7 8 4 2 1 5 5 10 0 0 样例输出: 11 Loowater is doomed! 分析: 能力高的其实开价高是合理的,但是如果你派去砍一个很弱的头,那就是浪费人才了。因此,可以把雇来的骑士按照能力从小到大排序,一个一个砍就可以了。不能砍掉当前需要砍的头的骑士就不要雇佣了。 代码如下: </pre><pre name="code" class="cpp">#include <cstdio> #include <algorithm> //sort的使用 using