텍스트 파일을 읽고 입력 배열 []이 boolean
유형 인 코드가 있습니다. 그것의 크기는 약 10 만 -300,000 항목입니다. 이제 내가 직면하고있는 문제는 인접한 참 값을 가진 N> 3> = N> = 9 인 모든 하위 집합을 만드는 것입니다.Algo의 최적화
예. N = 3 인 경우, [true] [true] [true]는 3 개의 모든 참값이 연속 인덱스에있는 경우 필수 하위 집합입니다.
알고리즘을 만들었지 만 매우 느립니다. 신속하고 효율적인 더 나은 솔루션이 필요합니다.
몇 가지 아이디어를 제안하십시오.
public static void createConsecutivePassingDays()
{
for (String siteName : sitesToBeTestedList.keySet())
{
System.out.println("\n*****************Processing for Site--->"+siteName+" ***********************");
LinkedHashMap<String,ArrayList<String>> cellsWithPassedTripletsDates=new LinkedHashMap<String, ArrayList<String>>();
for (String cellName : sitesToBeTestedList.get(siteName))
{
System.out.println("\n*****************Processing for Cell--->"+cellName+" ***********************");
boolean failed=false;
ArrayList<String> passedDatesTriplets=new ArrayList<String>();
int consecutiveDays=0;
String tripletDate="";
String prevDate_day="";
String today_Date="";
for (String date : cellDateKpiMetOrNotMap.get(cellName).keySet())
{
System.out.println("\nprocessing for Date-->"+date);
if(!(prevDate_day.trim().equals("")))
today_Date=getNextDay(prevDate_day.substring(0, prevDate_day.lastIndexOf('_')));
if(Connection.props.getProperty("INCLUDE_WEEKENDS").equalsIgnoreCase("FALSE"))
{
if(date.endsWith("SAT") || date.endsWith("SUN") || (!(date.substring(0, date.lastIndexOf('_')).equalsIgnoreCase(today_Date))))
{
if(consecutiveDays >= Reader.days)
{
passedDatesTriplets.add(tripletDate);
}
tripletDate="";
consecutiveDays=0;
prevDate_day=date;
continue;
}
}
if(cellDateKpiMetOrNotMap.get(cellName).get(date).equalsIgnoreCase("TRUE"))
{
if(tripletDate.equals(""))
tripletDate=date;
else
tripletDate+="#"+date;
consecutiveDays++;
}
else
{
failed=true;
if(consecutiveDays >= Reader.days)//kd
{
System.out.println("Triplet to be added-->"+tripletDate);
passedDatesTriplets.add(tripletDate);
}
tripletDate="";
consecutiveDays=0;
}
prevDate_day=date;
}
if(!failed)
passedDatesTriplets.add(tripletDate);
else
{
if(tripletDate.trim().split("#").length >= Reader.days)
{
passedDatesTriplets.add(tripletDate);
}
}
cellsWithPassedTripletsDates.put(cellName, passedDatesTriplets);
}
siteItsCellsWithPassedDates.put(siteName, cellsWithPassedTripletsDates);
}
System.out.println("\n************************************************SITES***************************************");
for (String site : siteItsCellsWithPassedDates.keySet())
{
System.out.println("\n********************Site="+site+" ***********************");
for (String cellName : siteItsCellsWithPassedDates.get(site).keySet())
{
System.out.println("\nCellName="+cellName);
System.out.println(siteItsCellsWithPassedDates.get(site).get(cellName));
}
System.out.println("***********************************************************");
}
System.out.println("********************************************************************************************");
}
현재 알고리즘은 무엇입니까? Code please – RNJ
이봐, 코드가 올라간다. ,,하지만 내가 물어 본 질문은 실제로 코드의 기초가되는 아주 기본적인 아이디어이지만, 다른 많은 기능들이 포함되어 있기 때문에 코드가 너무 복잡해서 보여줄 수 없다. – KDjava
알고리즘과 그 데이터 구조는 어떻게 코드에 매핑됩니까? 당신은 부울 배열에 대해 이야기했지만, 코드에서 수 많은 Strings와 Lists를 볼 수 있습니다 ... –