当前位置:首页 » 操作系统 » 实现算法

实现算法

发布时间: 2022-09-18 01:22:20

‘壹’ 在计算机上实现算法要通过什么方式

摘要 计算机算法是以一步接一步的方式来详细描述计算机如何将输入转化为所要求的输出的过程,或者说算法是对计算机上执行的计算过程的具体描述。

‘贰’ 实现算法:

输出成文件

C++实现

代码:

#define_author"Reskip"

#define_CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<string>

usingnamespacestd;

intencode(intx)
{
returnx*x+x*3+5;
}

intmain()
{
stringinput;
cin>>input;

freopen("save.txt","w",stdout);
for(chari:input)
{
cout<<encode(i)<<"";
}
return0;
}

‘叁’ 计算机的学生到底是实现算法 还是创造算法

1、 你这个问题我感觉提的不专业。我感觉你对名词的概念定义有点混乱。
2、 算法是一系列解决问题的步骤,可以画个流程图出来,分为伪代码的定义描述 和真代码的实现。
3、 如果你是志在创造算法,青史留名的话(比如什么逆波兰,迪克斯特拉算法什么的),我想你应该读到博士。做个真正的计算机科学家,努力发表几篇论文,这样对你青史留名可能会有帮助。
4、我个人认为,为了就业的话,理解现有数据结构和算法的代码实现,并且做到工程化应用,企业的工程项目上面不提倡重复造轮子,一般是拿来主义,看懂别人的轮子,会拆除,会重组轮子,是最重要的。

‘肆’ 算法实现

多看一些源代码最好,先动手编一些简单的程序,程序能力的提高都是靠看靠编出来的,理论不用很到位的面面具到的都非常懂会用最好,遇到问题会查阅资料。参考书籍的话:c就是谭浩强那本比较经典了,外国书是好但看起来费劲。c++就清华的潜能也不错。你直接学《数据结构和算法分析设计》这门课不太合理,因为得有一些基础和编程经验在学会更好一些。
多去csdn学习,多寻找一些好的源代码看看。这样学起来很快而且不枯燥,如果一味得看书你会烦得不行也没有尽头,边学边练习会极大增强信心。

‘伍’ 编写程序实现算法

#include <stdio.h>
#define false 0
#define true 1
#define maxsize 20typedef struct{
int r[maxsize+1]; //r[0]闲置或用作中转、哨兵单元
int length;
}sqlist;void Output(sqlist &L)
{
int i;
for(i=1;i<=L.length;i++)
{
printf("%d ",L.r[i]);
}
printf("\n");
}void BubbleSort(sqlist &L) {
int i,j, Exchange;
for (i=1;i<L.length;i++){
Exchange = false;
for (j = 1; j <= L.length-i; j++)
if (L.r[j+1] < L.r[j]) {
L.r[0] =L.r[j];
L.r[j] =L.r[j+1];
L.r[j+1] =L.r[0];
Output(L);
Exchange = true;
}
if (Exchange == false) return;
}
} // BubbleSortint Partition (sqlist &L, int low, int high)
{
int pivotkey;
L.r[0]=L.r[low];
pivotkey=L.r[low];
while(low<high)
{ while(low<high&&L.r[high]>=pivotkey)--high;
L.r[low]=L.r[high];
while(low<high&&L.r[low]<=pivotkey)++low;
L.r[high]=L.r[low];
}
L.r[low]=L.r[0];
return low;
}
void QSort (sqlist &L,int low,int high)
{
int pivotloc;
if (low<high)
{pivotloc=Partition(L,low,high);Output(L); QSort(L,low,pivotloc-1); QSort(L,pivotloc+1,high); }
}
int main()
{
sqlist L;
int i;
scanf("%d",&L.length);
for(i=1;i<=L.length;i++)
{
scanf("%d",&L.r[i]);
}
printf("BubbleSort:\n");
BubbleSort(L);
printf("QSort:\n");
QSort(L,1,L.length);
return 0;
}

‘陆’ JAVA 实现算法

编码是不能用字符串的,大大大降低速度

public class Test{
static public int getIntegerComplement(int n){
return ~n&((1<<(32-Integer.numberOfLeadingZeros(n)))-1);
}
public static void main(String[] args){
int a[]={1,5,50,256,65536};
for(int i:a){
int r=getIntegerComplement(i);
System.out.println(i+" "+Integer.toBinaryString(i)+
" => "+r+" "+Integer.toBinaryString(r));
}
}
}
========
1 1 => 0 0
5 101 => 2 10
50 110010 => 13 1101
256 100000000 => 255 11111111
65536 10000000000000000 => 65535 1111111111111111

‘柒’ 在算法实现中,算法的正确性如何保证

算法本身的正确性用逻辑推理来证明,和数学定理类似

实现算法的程序的正确性则是两码事
简单的程序也用逻辑推理来证明,稍复杂的可以用某些专门验证程序正确性的程序来验证,再复杂的就没什么好办法了,事实上很多复杂的程序在比较极端的输入下或多或少都会有点问题

‘捌’ 实现一个算法,确定一个字符串的所有字符是否全都不同

实现一个算法,确定一个字符串的所有字符是否全都不同。假设不允许使用额外的数据结构。
解题:
首先我们假设这个字符串中全都是ASCII字符(如果不是需要另外讨论了)。因为ASCII字符集中总共有256个字符,所以我们可以知道如果字符串的长度超过了那么字符串中肯定有相同的字符。
定义一个bool型大小为256的数组array,然后遍历输入的字符串,每遍历一个字符,令int型变量val等于该字符的的ASCII码,如果这个字符之前都没有出现过,那么令array[val]等于true,如果这个字符之前出现过了,也就是array[val]已经等于true了,就返回false。当字符串中所有字符都遍历结束后,如果没有返回false,那么说明字符串中没有重复的字符,返回true。
源代码:
#include<iostream>
#include<string>
using namespace std;
bool ifnosame(string str)//定义一个bool型函数实现算法
{
if (str.length() > 256)
{
return false;
}
bool array[256];
int val;
for (int i = 0; i < str.length(); i++)
{
val = str[i];
if (array[val] == true)
{
return false;
}
array[val] = true;
}
return true;
}
int main()
{
string s;
cout << "输入一个字符串,判断其中所有字符是否全都不同:";
cin >> s;
if (ifnosame(s))
{
cout << "字符串中所有字符全都不同" << endl;
}
else
{
cout << "字符串中所有字符并不是全都不同的" << endl;
}
system("pause");
return true;
}

‘玖’ 的实现算法是怎样的

我们要写个class,实现如下主程序调用:

static void Main(string[] args)
{
MyHash hash = new MyHash();
hash["A1"] = DateTime.Now;
hash["A2"] = 1;
Console.WriteLine(Convert.ToString(hash["A1"]));
Console.WriteLine(Convert.ToString(hash["A2"]));
}

一看,也确实挺简单的,就是一个所引器,如下:

class MyHash
{
public object this[string key]
{
get
{
}
set
{
}
}
}

程序中要保存的对象,最终是要保存在一个数组中的,而且需要通过一个转换函数来进行string key与数组Index的Map,如下:

private List<List<Tuple<string, object>>> lstArray = new List<List<Tuple<string, object>>>(defaultSize);

private int MapString2Int(string key)
{
int hashIndex=0;
char[] keyAry = key.ToCharArray();
foreach (var c in keyAry)
hashIndex += (int)c;

hashIndex = hashIndex % lstArray.Capacity;
return hashIndex;
}

这个函数是遍历string key的每个char,累加,最终取模(同数组的长度),这样得出的一个value肯定就在数组范围内。
如果2个key转换出来的index相同呢?会导致冲突,一个最简单的解决办法是把数组中的每个元素变成List, 也就是说,如果string key转换后出现了相同的Index,没关系,只要把那2个元素都放在那个Index所标识的数组位置中即可,本文中用的是List<Tuple<string, object>>。
下面是整个程序的代码:

class Program
{
static void Main(string[] args)
{
MyHash hash = new MyHash();
hash["A1"] = DateTime.Now;
hash["A2"] = 1;
Console.WriteLine(Convert.ToString(hash["A1"]));
Console.WriteLine(Convert.ToString(hash["A2"]));
}
}

class MyHash
{
private const int defaultSize = 99999;
private List<List<Tuple<string, object>>> lstArray = new List<List<Tuple<string, object>>>(defaultSize);

public MyHash()
{
int i = lstArray.Capacity;
while(i>=0)
{
lstArray.Add(new List<Tuple<string,object>>());
i--;
}
}

public object this[string key]
{
get
{
EnsureNotNull(key);

List<Tuple<string, object>> lst;
Tuple<string, object> obj = FindByKey(key, out lst);
if (obj == null)
throw new Exception("Key不存在");

return obj.Item2;
}
set
{
EnsureNotNull(key);

List<Tuple<string, object>> lst;
Tuple<string, object> obj = FindByKey(key, out lst);
if (obj!=null)
lst.Remove(obj);

lst.Add(new Tuple<string, object>(key, value));
}
}

private Tuple<string, object> FindByKey(string key, out List<Tuple<string, object>> lst)
{
int hashIndex = MapString2Int(key);
lst = lstArray[hashIndex];
Tuple<string, object> obj = null;
for (var i = 0; i < lst.Count; i++)
{
if (lst[i].Item1 == key)
{
obj = lst[i];
break;
}
}

return obj;
}

private static void EnsureNotNull(string key)
{
if (key == null || key.Trim().Length == 0)
throw new Exception("Key不能为空");
}

private int MapString2Int(string key)
{
int hashIndex=0;
char[] keyAry = key.ToCharArray();
foreach (var c in keyAry)
hashIndex += (int)c;

hashIndex = hashIndex % lstArray.Capacity;

Console.WriteLine(string.Format("{0}相应的Index为:{1}", key, hashIndex));

return hashIndex;
}
}

‘拾’ 用web解决数据结构问题怎么实现算法

(1)数据结构与算法的联系:
程序=算法+数据结构。数据结构是算法实现的基础,算法总是要依赖于某种数据结构来实现的。往往是在发展一种算法的时候,构建了适合于这种算法的数据结构。 算法的操作对象是数据结构。算法的设计和选择要同时结合数据结构,简单地说数据结构的设计就是选择存储方式,如确定问题中的信息是用数组存储还是用普通的变量存储或其他更加复杂的数据结构。算法设计的实质就是对实际问题要处理的数据选择一种恰当的存储结构,并在选定的存储结构上设计一个好的算法。不同的数据结构的设计将导致差异很大的算法。数据结构是算法设计的基础。用一个形象的比喻来解释:开采煤矿过程中,煤矿以各种形式深埋于地下。矿体的结构就像相当于计算机领域的数据结构,而煤就相当于一个个数据元素。开采煤矿然后运输、加工这些“操作”技术就相当于算法。显然,如何开采,如何运输必须考虑到煤矿的存储(物理)结构,只拥有开采技术而没有煤矿是没有任何意义的。算法设计必须考虑到数据结构,算法设计是不可能独立于数据结构的。 另外,数据结构的设计和选择需要为算法服务。如果某种数据结构不利于算法实现它将没有太大的实际意义。知道某种数据结构的典型操作才能设计出好的算法。
总之,算法的设计同时伴有数据结构的设计,两者都是为最终解决问题服务的。
(2)数据结构与算法的区别:
数据结构关注的是数据的逻辑结构、存储结构以及基本操作,而算法更多的是关注如何在数据结构的基础上解决实际问题。算法是编程思想,数据结构则是这些思想的逻辑基础。

热点内容
c语言字符串初始化 发布:2025-05-17 20:18:43 浏览:35
安卓融e联推送需要什么权限 发布:2025-05-17 20:18:39 浏览:268
我的世界无限武魂服务器 发布:2025-05-17 20:17:09 浏览:371
安卓手游脚本语言 发布:2025-05-17 19:53:07 浏览:21
找圈算法 发布:2025-05-17 19:49:19 浏览:410
数据库的存取方法 发布:2025-05-17 19:48:36 浏览:125
androidapp测试 发布:2025-05-17 19:48:19 浏览:389
如何修改iphone密码修改 发布:2025-05-17 19:47:31 浏览:509
发现了致富密码是什么意思 发布:2025-05-17 19:45:42 浏览:416
耐存储的纸 发布:2025-05-17 19:43:35 浏览:931