拼音串最有可能表示的意思
2017-08-25 12:02
218 查看
已知一些文字对应的拼音及其在数据库中对应的概率,在给定一段有序的拼音串时,求解其最有可能表示的意思,并给出对应的概率值!
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map.Entry;
import java.util.Scanner;
import java.util.Set;
public class Main {
static HashMap<String, Float> dict = new HashMap<String, Float>();
static {
dict.put("fu", 0.1242f);
dict.put("tao", 0.1212f);
dict.put("peng", 0.23f);
dict.put("ge", 0.143f);
dict.put("e",0.77f);
dict.put("ta",0.37f);
dict.put("o",0.47f);
}
private static float findMaxProbabilityString(char[] cdata, int start, int end, ArrayList<String> al) {
if(start <= end) {
ArrayList<String> l = new ArrayList<String>();
for(int i=1; i<=6 && start+i-1<cdata.length ; i++) {
String tmp = new String(cdata,start,i);
if(dict.containsKey(tmp))
l.add(tmp);
}
int numInDict = l.size();
float maxRate = 0.0f;
int position = 0;
if( numInDict != 0) {
float[] keyToFloat = new float[numInDict];
for(int j=0; j<numInDict; j++) {
keyToFloat[j] = dict.get(l.get(j)) * findMaxProbabilityString(cdata,start+l.get(j).length(),end,al);
if(keyToFloat[j] > maxRate) {
maxRate = keyToFloat[j];
position = j;
}
}
al.add(l.get(position));
}
return maxRate;
}
return 1;
}
public static void main(String[] args) {
/*
Set<Entry<String,Float>> es = dict.entrySet();
for(Entry<String,Float> e : es)
System.out.println(e.getKey()+":"+e.getValue());
*/
Scanner sc = new Scanner(System.in);
while(sc.hasNext()) {
String data = sc.nextLine();
char[] cdata = data.toCharArray();
ArrayList<String> al = new ArrayList<String>();
float result = findMaxProbabilityString(cdata,0,cdata.length-1,al);
//need to reverse
for(String l : al)
System.out.println(l);
System.out.println(result);
}
}
}
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map.Entry;
import java.util.Scanner;
import java.util.Set;
public class Main {
static HashMap<String, Float> dict = new HashMap<String, Float>();
static {
dict.put("fu", 0.1242f);
dict.put("tao", 0.1212f);
dict.put("peng", 0.23f);
dict.put("ge", 0.143f);
dict.put("e",0.77f);
dict.put("ta",0.37f);
dict.put("o",0.47f);
}
private static float findMaxProbabilityString(char[] cdata, int start, int end, ArrayList<String> al) {
if(start <= end) {
ArrayList<String> l = new ArrayList<String>();
for(int i=1; i<=6 && start+i-1<cdata.length ; i++) {
String tmp = new String(cdata,start,i);
if(dict.containsKey(tmp))
l.add(tmp);
}
int numInDict = l.size();
float maxRate = 0.0f;
int position = 0;
if( numInDict != 0) {
float[] keyToFloat = new float[numInDict];
for(int j=0; j<numInDict; j++) {
keyToFloat[j] = dict.get(l.get(j)) * findMaxProbabilityString(cdata,start+l.get(j).length(),end,al);
if(keyToFloat[j] > maxRate) {
maxRate = keyToFloat[j];
position = j;
}
}
al.add(l.get(position));
}
return maxRate;
}
return 1;
}
public static void main(String[] args) {
/*
Set<Entry<String,Float>> es = dict.entrySet();
for(Entry<String,Float> e : es)
System.out.println(e.getKey()+":"+e.getValue());
*/
Scanner sc = new Scanner(System.in);
while(sc.hasNext()) {
String data = sc.nextLine();
char[] cdata = data.toCharArray();
ArrayList<String> al = new ArrayList<String>();
float result = findMaxProbabilityString(cdata,0,cdata.length-1,al);
//need to reverse
for(String l : al)
System.out.println(l);
System.out.println(result);
}
}
}
相关文章推荐
- “iOS4.3+”等,表示那个版本以上的意思,这个加号的来历可能是XML
- 几个华为5300交换机故障的意思和可能产生的原因
- warning C4407: 在指向成员表示形式的不同指针之间进行转换,编译器可能生成不正确的代码
- 微软算法100道题-------输入两个整数序列。其中一个序列表示栈的push顺序, 判断另一个序列有没有可能是对应的pop顺序。
- oracle 里 符号" ||" 表示什么意思??
- margin:0 auto 表示什么意思??
- Php中两个连续冒号::表示什么意思
- C++函数前加宏表示的意思
- PHP 输入两个整数序列。其中一个序列表示栈的push 顺序, 判断另一个序列有没有可能是对应的pop 顺序
- 在StatsPack中的USER CALLS表示什么意思?
- svn 图标所表示的意思
- 以0x开头的数值表示什么意思?
- 【转】网页制作中的CSS+DIV:dl,dt,dd分别表示什么意思啊?请说明啊,谢谢有什么功能?
- #!/bin/bash表示什么意思
- shell一些转义字符的表示的特殊意思
- STAThread [STAThread] 表示什么意思?
- margin:0 auto 表示什么意思??
- svn 图标所表示的意思
- 其中 (%{WORD:x_forword}|-) |表示或的意思
- java中xxx.class表示的意思