最佳适应算法java代码,最佳适应算法源代码

去哪儿网java开发面试经验牛客

以下是某位求职者面经,仅供参考:

网站建设哪家好,找创新互联公司!专注于网页设计、网站建设、微信开发、微信小程序、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了武义免费建站欢迎大家使用!

一面:

1.自我介绍

2.直接上手红黑树和平衡二叉树区别

3.红黑树的旋转

2node节点插入和3node节点插入时候旋转的情况 简述伪代码

4.问项目情况。大概半小时 5.concurrenthashmap

结构分析。 删除和获取操作过程描述。就是segment. Entry.

除了value 为volatile 其余都是final.

删除和获取操作等等。例如:删除操作是将entry要删除的节点的前半部分链表进行复制,并指向当前删除节点的后面节点。(因为next是final的,不可以进行修改,只有entry的表头可以修改)

不详述了。

6.索引的优缺点 什么时候索引不起作用? 在什么地方可以使用索引?

7.jvm

多态原理。invokestatic invokeinterface

等指令。常量池中的符号引用 找到直接引用。在堆中找到实例对象,获取到偏移量,由偏移量在方法表中指出调用的具体方法。接口是在方法表中进行扫描)等等扯了半天

8.os: 页面调度算法 几种 分别说一下 LRU FIFO 最佳适应算法

9.内存管理: 固定分区 动态分区 段 页 都讲讲 (哈哈)

10.自己实现一下LRU算法

8.怎么学习。看过什么书

二面:

1.自我介绍

2.项目中与app移动端 的json格式设计

3.hashmap的缺点 具体提现在哪里?

4.Collections.sort()

的原理---本质上调用的是Arrays.sort() 内部是 使用的归并排序 接着写了一下归并(辅助数组的归并,和手摇算法的归并)

5.一个字符串数组,现给定一个string去进行找出对应的数组中字符串的下标 (可以有容错,但两字符串长度必须一致,容错为2)

例如:

["hello","hj","abc"]

key=“hellg" 返回下角标0

6.jvm参数调优 jvm堆的大小调优

MaxTureningShelod newratio -xxs -xxm -persize

7.图的 prime

算法

kruskal

算法

dijkstra算法 解决什么问题? 分别写一下

伪代码

8.设计模式: 单例模式(懒汉饿汉) 工厂方法模式 观察者模式 责任链模式

9.项目 又问了一些

10.平时怎么学习?

三面:

1.自我介绍

2.自己优缺点

3.目前有几个offer

4.工作地点要求

5.在校实验室做项目,你认为最大的收获是什么

6.评价一下自己的大学生活

7.讲了一下福利 之类的

现场书面offer没了,所以只好等等邮寄,不过还好给了一个布偶纪念品

求一个java或c++程,最好是java的。需要能运行,代码尽量详细,最好有说明,通过一定追加分数!

时间比较有限,所以给你一个java多线程的程序,可以将该程序看做是分时系统中线程的运行。已经测试过了,能运行,可以改变参数,或者添加线程来实现更难的问题。悬赏分才5分啊,呵呵,有点低了,不是有点,是相当低了....

public class ThreadTwo extends Thread

{

private String str;

private int delayTime;

public ThreadTwo(String s,int time)

{

str=s;

delayTime=time;

}

public void run()

{

try

{

for(;;)

{

System.out.print(str+" ");

Thread.sleep(delayTime);

}

}

catch (Exception e)

{

System.out.println(e);

}

}

public static void main(String[] args)

{

String[] str=new String[2];

str[0]="First";

str[1]="Second";

new ThreadTwo(str[0],1000).start();

new ThreadTwo(str[1],500).start();

}

}

学习Java软件工程师要具备什么条件?

一要适应Java编程

Java软件开发必然离不开编程,这是一种与计算机进行交流的语言,是一种非人类语言,所以一定要有极强的逻辑性和运算性,要求程序员在编写的时候进行慎重的考虑。能够脚踏实地细心地研究一行行代码,具有较强的逻辑思维能力,同时有一个端正的学习态度和心态,这些都是从事Java工作的基础能力和必要要求。

二要会总结学习方式

我们常说行行出状元,这是因为他们能够掌握最适合自己的方法,学习Java也不例外,只有掌握好的学习方法才能取得事半功倍的效果。寻找专业的Java培训机构是一个非常不错的选择,一般来说专业的培训机构有资深的老师进行辅导,学习氛围佳,有完善的教学体系,还有就业老师推荐工作,对于学习Java来说事半功倍。

三要对Java感兴趣

俗话说,兴趣是学习最好的老师,在任何学习和工作中,兴趣都是很关键的。目前Java很热门,受关注度高,很多人纯粹为了好就业,就盲目进行学习。最后可能自己学有所成,但却没有兴趣继续从事这项工作,最后后悔的还是自己,浪费了大量的时间和金钱。所以对于Java开发这种技术性行业,兴趣真的很重要。

急求 遗传算法 java程序

import java.awt.BorderLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JPanel;

import javax.swing.JScrollPane;

import javax.swing.JTextArea;

import javax.swing.JTextField;

/**

* 编写者: 赖志环

* 标准遗传算法求解函数

* 编写日期: 2007-12-2

*/

class Best {

public int generations; //最佳适应值代号

public String str; //最佳染色体

public double fitness; //最佳适应值

}

public class SGAFrame extends JFrame {

private JTextArea textArea;

private String str = "";

private Best best = null; //最佳染色体

private String[] ipop = new String[10]; //染色体

private int gernation = 0; //染色体代号

public static final int GENE = 22; //基因数

/**

* Launch the application

* @param args

*/

public static void main(String args[]) {

try {

SGAFrame frame = new SGAFrame();

frame.setVisible(true);

} catch (Exception e) {

e.printStackTrace();

}

}

/**

* Create the frame

*/

public SGAFrame() {

super();

this.ipop = inialPops();

getContentPane().setLayout(null);

setBounds(100, 100, 461, 277);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

final JLabel label = new JLabel();

label.setText("X的区间:");

label.setBounds(23, 10, 88, 15);

getContentPane().add(label);

final JLabel label_1 = new JLabel();

label_1.setText("[-255,255]");

label_1.setBounds(92, 10, 84, 15);

getContentPane().add(label_1);

final JButton button = new JButton();

button.addActionListener(new ActionListener() {

public void actionPerformed(final ActionEvent e) {

SGAFrame s = new SGAFrame();

str = str + s.process() + "\n";

textArea.setText(str);

}

});

button.setText("求最小值");

button.setBounds(323, 27, 99, 23);

getContentPane().add(button);

final JLabel label_2 = new JLabel();

label_2.setText("利用标准遗传算法求解函数f(x)=(x-5)*(x-5)的最小值:");

label_2.setBounds(23, 31, 318, 15);

getContentPane().add(label_2);

final JPanel panel = new JPanel();

panel.setLayout(new BorderLayout());

panel.setBounds(23, 65, 399, 164);

getContentPane().add(panel);

final JScrollPane scrollPane = new JScrollPane();

panel.add(scrollPane, BorderLayout.CENTER);

textArea = new JTextArea();

scrollPane.setViewportView(textArea);

//

}

/**

* 初始化一条染色体(用二进制字符串表示)

* @return 一条染色体

*/

private String inialPop() {

String res = "";

for (int i = 0; i GENE; i++) {

if (Math.random() 0.5) {

res += "0";

} else {

res += "1";

}

}

return res;

}

/**

* 初始化一组染色体

* @return 染色体组

*/

private String[] inialPops() {

String[] ipop = new String[10];

for (int i = 0; i 10; i++) {

ipop[i] = inialPop();

}

return ipop;

}

/**

* 将染色体转换成x的值

* @param str 染色体

* @return 染色体的适应值

*/

private double calculatefitnessvalue(String str) {

int b = Integer.parseInt(str, 2);

//String str1 = "" + "/n";

double x = -255 + b * (255 - (-255)) / (Math.pow(2, GENE) - 1);

//System.out.println("X = " + x);

double fitness = -(x - 5) * (x - 5);

//System.out.println("f(x)=" + fitness);

//str1 = str1 + "X=" + x + "/n"

//+ "f(x)=" + "fitness" + "/n";

//textArea.setText(str1);

return fitness;

}

/**

* 计算群体上每个个体的适应度值;

* 按由个体适应度值所决定的某个规则选择将进入下一代的个体;

*/

private void select() {

double evals[] = new double[10]; // 所有染色体适应值

double p[] = new double[10]; // 各染色体选择概率

double q[] = new double[10]; // 累计概率

double F = 0; // 累计适应值总和

for (int i = 0; i 10; i++) {

evals[i] = calculatefitnessvalue(ipop[i]);

if (best == null) {

best = new Best();

best.fitness = evals[i];

best.generations = 0;

best.str = ipop[i];

} else {

if (evals[i] best.fitness) // 最好的记录下来

{

best.fitness = evals[i];

best.generations = gernation;

best.str = ipop[i];

}

}

F = F + evals[i]; // 所有染色体适应值总和

}

for (int i = 0; i 10; i++) {

p[i] = evals[i] / F;

if (i == 0)

q[i] = p[i];

else {

q[i] = q[i - 1] + p[i];

}

}

for (int i = 0; i 10; i++) {

double r = Math.random();

if (r = q[0]) {

ipop[i] = ipop[0];

} else {

for (int j = 1; j 10; j++) {

if (r q[j]) {

ipop[i] = ipop[j];

break;

}

}

}

}

}

/**

* 交叉操作

* 交叉率为25%,平均为25%的染色体进行交叉

*/

private void cross() {

String temp1, temp2;

for (int i = 0; i 10; i++) {

if (Math.random() 0.25) {

double r = Math.random();

int pos = (int) (Math.round(r * 1000)) % GENE;

if (pos == 0) {

pos = 1;

}

temp1 = ipop[i].substring(0, pos)

+ ipop[(i + 1) % 10].substring(pos);

temp2 = ipop[(i + 1) % 10].substring(0, pos)

+ ipop[i].substring(pos);

ipop[i] = temp1;

ipop[(i + 1) / 10] = temp2;

}

}

}

/**

* 基因突变操作

* 1%基因变异m*pop_size 共180个基因,为了使每个基因都有相同机会发生变异,

* 需要产生[1--180]上均匀分布的

*/

private void mutation() {

for (int i = 0; i 4; i++) {

int num = (int) (Math.random() * GENE * 10 + 1);

int chromosomeNum = (int) (num / GENE) + 1; // 染色体号

int mutationNum = num - (chromosomeNum - 1) * GENE; // 基因号

if (mutationNum == 0)

mutationNum = 1;

chromosomeNum = chromosomeNum - 1;

if (chromosomeNum = 10)

chromosomeNum = 9;

//System.out.println("变异前" + ipop[chromosomeNum]);

String temp;

if (ipop[chromosomeNum].charAt(mutationNum - 1) == '0') {

if (mutationNum == 1) {

temp = "1" + ipop[chromosomeNum].substring

(mutationNum);

} else {

if (mutationNum != GENE) {

temp = ipop[chromosomeNum].substring(0, mutationNum -

1) + "1" + ipop

[chromosomeNum].substring(mutationNum);

} else {

temp = ipop[chromosomeNum].substring(0, mutationNum -

1) + "1";

}

}

} else {

if (mutationNum == 1) {

temp = "0" + ipop[chromosomeNum].substring

(mutationNum);

} else {

if (mutationNum != GENE) {

temp = ipop[chromosomeNum].substring(0, mutationNum -

1) + "0" + ipop

[chromosomeNum].substring(mutationNum);

} else {

temp = ipop[chromosomeNum].substring(0, mutationNum -

1) + "1";

}

}

}

ipop[chromosomeNum] = temp;

//System.out.println("变异后" + ipop[chromosomeNum]);

}

}

/**

* 执行遗传算法

*/

public String process() {

String str = "";

for (int i = 0; i 10000; i++) {

this.select();

this.cross();

this.mutation();

gernation = i;

}

str = "最小值" + best.fitness + ",第" + best.generations + "个染色体";

return str;

}

}


本文标题:最佳适应算法java代码,最佳适应算法源代码
URL标题:http://myzitong.com/article/hdjijg.html