题目:求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)。不能用条件语句,基本上只有考虑递归。常规解法:利用构造函数的每次初始化来实现递增class Sum {
public:Sum() {num++; sum+=num;}staticvoid Reset() {num = 0; sum = 0;}staticint GetSum() {return sum;}
private:staticint num;staticint sum;
};int Sum::num = 0;
int Sum::sum = 0;int SS(int i) {Sum::Reset...
(上接第二章) 4.3.1 KMeans 算法流程 算法的过程如下: (1)从N个数据文档随机选取K个文档作为质心 (2)对剩余的每个文档测量其到每个质心的距离,并把它归到最近的质心的类 (3)重新计算已经得到的各个类的质心 (4)迭代(2)~(3)步直至新的质心与原质心相等或者小于指定阀值,算法结束。 4.3.2 辅助函数 (1)文件数据转为矩阵:file2matrixdef file2matrix(path,delimiter):recordlist = []fp ...
原文引自:http://blog.csdn.net/hguisu/article/details/8005192,感谢 前面的讨论提到。PageRank忽略了主题相关性,导致结果的相关性和主题性降低,对于不同的用户,甚至有很大的差别。例如,当搜索“苹果”时,一个数码爱好者可能是想要看 iphone 的信息,一个果农可能是想看苹果的价格走势和种植技巧,而一个小朋友可能在找苹果的简笔画。理想情况下,应该为每个用户维护一套专用向量,但面对海量用户这种方法显然不可行。所以...
---------------------插入算法-------------------- //创建数组 int array[] = {1,6,4,9,6,12,3}; int i,j,temp; //数组第一个元素默认排好序,从第二元素开始遍历数组 for (i = 1; i < 7; i ++) { //获得第二部分的第一个元素 temp = array[i]; j = i - 1; //与第一部分已经排好序的数组逐一比较,大于temp时,该元素后移 while (j >= 0 && array[j] > temp) { arr...
贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,算法得到的是在某种意义上的局部最优解,这是百度百科对贪心算法的基本介绍,下面会通过一个具体案例来介绍一下。先看下面这个方法,不需要删除字符的时候我们总是将字符值对比分解成一个一个的,只需要考虑左右对应位置字符值是否相同而不需要去考虑整体,直到两指针相遇,这样就会将整体对比问题分解成局部对...
http://acm.hdu.edu.cn/showproblem.php?pid=4862选t<=k次,t条路要经过所有的点一次并且仅仅一次,建图是问题:
我自己最初就把n*m 个点分别放入X集合以及Y集合,再求最优匹配,然后连样例都过不了,而且其实当时解释不了什么情况下不能得到结果,因为k此这个条件相当于没用上。。。建图方法:
1、X集合和Y集合都放入n*m+k个点,X中前n*m个点和Y中前n*m个点之间,如果格子里的值相等,权就是(收益-耗费),不等就是(-耗费),因...
对博弈树的理解 简单而言就是对每一步可能的结果进行分析 之后对当前步骤的下一步的所有可能结果进行分析而创建的树专业表示极大极小博弈树:极大极小博弈树是因描绘这种结构的一种简单算法而得名。我们来对ttt游戏的结果分配一下分值。如果叉(X)获胜,则分值为1。如果圈(O)获胜,则分值为-1。现在,叉将试图获得最大化的分值,而圈将试图最小化分值。于是,第一位研究此问题的研究者决定把游戏者叉命名为max,并且把游戏者圈命...
1.共识算法:分别解决非拜占庭的普通错误和解决拜占庭错误,相应算法分为crash fault tolerance(CFT)和byzantine fault tolerance(BFT).对于CFT的算法有:Paxos,Raft及其变种。特点:性能好,处理快,容忍不超过一半的故障节点。对于BFT的算法有:PBFT(practical byzantine fault tolerance)确定性算法PoW(proof of work)为代表的概率算法。对于确定性算法,一旦达成某个共识就不可逆转,即共识是最终结果;而对于概率类算法,共识...
参考博客:http://www.cnblogs.com/heaad/archive/2010/12/20/1911614.html引入:爬山算法:这是一种简单的贪心搜索算法,该算法每次从当前解的临近解空间中选择一个最优解作为当前解,直到达到一个局部最优解。 爬山算法实现很简单,其主要缺点是会陷入局部最优解,而不一定能搜索到全局最优解。如图1所示:假设C点为当前解,爬山算法搜索到A点这个局部最优解就会停止搜索,因为在A点无论向那个方向小幅度移动都不能得到更...
在一个 2^k * 2^k 个方格组成的棋盘中,若恰有一个方格与其他方格不同。则称该方格为一特殊方格,称该棋盘为一特殊棋盘。显然特殊方格在棋盘上出现的位置有 4^k 种情形。因而对不论什么 k>=0 。有 4^k 种不同的特殊棋盘。下图所看到的的特殊棋盘为 k=2 时 16 个特殊棋盘中的一个。在棋盘覆盖问题中,要用下图中 4 中不同形态的 L 型骨牌覆盖一个给定的特殊棋牌上除特殊方格以外的全部方格,且不论什么 2 个 L 型骨牌不得重叠覆盖。...
题目:0:给定链表 L 和链表 P ,它们包含以升序排列的整数。操作 PrintList ( L , P ),将打印 L 中那些由 P 所指定位置上的元素,如 P 中的元素为 1 4 5,则打印 L 中第 1,4,5个元素。 解法1: 计算记录每次 L 中遍历的步长 来打印相应节点的元素。解法2: 循环遍历 L 并且 由整形变量记录走到第 n 个元素处,若这个 n 与 P的记录的数据相同,则打印 L 中该节点的数据。 1 #include <stdio.h>2 #include "list.c" 3 4void Print...
using System;
using System.Collections.Generic;
using System.Text;namespace ConsoleApplication1
{class Program{static void Main(string[] args){int[] iArray = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 };for (int i = 0; i < iArray.Length; i++)Console.Write(iArray[i] + ",");Console.WriteLine("请输入您要查找的数字:");int ikey = Convert.ToInt32(Console.ReadLine(...
1. 算法概念algorithm:一个计算过程,解决问题的方法
程序设计=数据结构+算法
输入→算法→输出
数据结构就是关系2. 时间复杂度用来估计算法运行时间的一个式子,一般来说时间复杂度高的算法比复杂度低的算法慢2.1 一些例子:print('hello') # O1for i in range(n): # O(n)print('hello')for i in range(n): # O(n2)for j in range(n):print('hello')while n > 1: # O(logn)print(n)n = n//22.2 时间复杂度排序2.3 快速判断算...
# 利用object的key唯一性删除数组重复项
# uniq.html<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<script type="text/javascript">
var arr=[12,34,22,34,55,90,66,12,90,9,12,33,22]
//将数组转换为object,数组的元素转换为Object的key
function toObject(arr){
var obj={}
for (var i = arr.length - 1; i >= 0; i--) {
obj[arr[i]]=true
}
...
我们通常所说的排序算法往往指的是内部排序算法,即数据记录在内存中进行排序。 排序算法大体可分为两种: 一种是比较排序,时间复杂度O(nlogn) ~ O(n^2),主要有:冒泡排序,选择排序,插入排序,归并排序,堆排序,快速排序等。 另一种是非比较排序,时间复杂度可以达到O(n),主要有:计数排序,基数排序,桶排序等。下表给出了常见比较排序算法的性能: 为了便于以下描述,接下来全部算法的排序对象均为乱序数...