Перейти к публикации
  • Сейчас на странице   Всего пользователей: 0   (0 пользователей, 0 гостей)

Hed-kun

Программирование, т. 5.1.

Рекомендованные сообщения

http://gagoel-algorithm.blogspot.com/2012/03/longest-increasing-subsequence.html

 

вот там вроде норм расписано много вариантов с разными показателями по времени

 

 

Если вам совсем нечего делать, можете еще longetst common sequence поизучать. Это был мой супервеселый и суперпонятный первый в жизни курсач :sad:


Торжество разума в том, чтобы уживаться с теми, у кого этого разума нет. Вольтер.
Чтобы хорошо высыпаться, нужно спать 8 часов в день. И еще столько же ночью.

Поделиться сообщением


Ссылка на сообщение

не думаю что есть вариант проще этого

 

 class MaximumIncreasingSequence
 {
int[] Sequence;
static Random r = new Random();
int Result = 0;

public MaximumIncreasingSequence(int N, int limit)
{
  Sequence = new int[N];

  for (int i = 0; i < N; i++)
	Sequence[i] = r.Next(1, limit);
}
public string TxtSeq
{ get { string res = ""; foreach (int s in Sequence) res += s + " "; return res.Trim(); } }

public string CountK()
{
  Result = Sequence.Length;

  for (int i = 0; i < Sequence.Length; i++)
	CountNext(i, i, 0);

  return string.Format("Res: {0}", Result);
}

private void CountNext(int currentIndex, int excludedNumbers, int last)
{
  if (excludedNumbers >= Result)
	return;

  if (currentIndex >= Sequence.Length - 1)
  {   // lastitem
	if (Sequence[currentIndex] <= last)
	  excludedNumbers++;
	if (excludedNumbers < Result)
	  Result = excludedNumbers;
	return;
  }

  if (Sequence[currentIndex] > last)
  {
	CountNext(currentIndex + 1, excludedNumbers, Sequence[currentIndex]);
  }
  CountNext(currentIndex + 1, excludedNumbers + 1, last);
}
 }

 

я у тебя тут вообще не вижу перебора никакого.

Колы я выросту - то хочу буты такым як я

5c8bbc85b99e.gif

 

годные смайлы

Поделиться сообщением


Ссылка на сообщение

не думаю что есть вариант проще этого

 

 class MaximumIncreasingSequence
 {
int[] Sequence;
static Random r = new Random();
int Result = 0;

public MaximumIncreasingSequence(int N, int limit)
{
  Sequence = new int[N];

  for (int i = 0; i < N; i++)
	Sequence[i] = r.Next(1, limit);
}
public string TxtSeq
{ get { string res = ""; foreach (int s in Sequence) res += s + " "; return res.Trim(); } }

public string CountK()
{
  Result = Sequence.Length;

  for (int i = 0; i < Sequence.Length; i++)
	CountNext(i, i, 0);

  return string.Format("Res: {0}", Result);
}

private void CountNext(int currentIndex, int excludedNumbers, int last)
{
  if (excludedNumbers >= Result)
	return;

  if (currentIndex >= Sequence.Length - 1)
  {   // lastitem
	if (Sequence[currentIndex] <= last)
	  excludedNumbers++;
	if (excludedNumbers < Result)
	  Result = excludedNumbers;
	return;
  }

  if (Sequence[currentIndex] > last)
  {
	CountNext(currentIndex + 1, excludedNumbers, Sequence[currentIndex]);
  }
  CountNext(currentIndex + 1, excludedNumbers + 1, last);
}
 }

 

я у тебя тут вообще не вижу перебора никакого.

а что это тогда, если не полный перебор всех допустимых возрастающих последовательностей?

Поделиться сообщением


Ссылка на сообщение

как твое решение разруливает такие последовательности? 1, 5, 2


Колы я выросту - то хочу буты такым як я

5c8bbc85b99e.gif

 

годные смайлы

Поделиться сообщением


Ссылка на сообщение

Ну так открой код и посмотри как :nate:

 

Или вот ещё лучше теоретического описание из прошлого поста

но этот алгоритм слишком прямолинен и будет в говне при хитрой последовательности скажем 1, 2, 20, 3, 4, 5, он не найдёт последовательность 12345, только 1 2 20 или 3 4 5 - и в ответе я получал только тройку

 

нужен какой-то рекурсивный алгоритм, какой-то вариант полного перебора когда оно пытается поочерёдно исключать следующее и далее числа в поиске возможных комбинаций наибольшей последовательности

 

типа такого

1, 2, 20, 3 ... // не исключает ничего и в лоб ищет до конца останавливаясь только на меньших последнего числах

1, 2, 20, 3 ... // исключает первое число и так же идёт дальше

1, 2, 20, 3 ... // исключает первые два

1, 2, 20, 3 ... // исключает 1 и 3

...

1, 2, 20, 3 ... // исключает второе

1, 2, 20, 3 ... // исключает 2-3

 

(первое, втрое = числа после стартового индекса, т.е. по факту второе, третье)

Поделиться сообщением


Ссылка на сообщение

вот по-этому я и говорил о полном переборе


Колы я выросту - то хочу буты такым як я

5c8bbc85b99e.gif

 

годные смайлы

Поделиться сообщением


Ссылка на сообщение

Не беси блядь, создай консольный проект, вкинь туда мой код и заставь его вместо рандомного массива схавать любую заданую тобой последовательность.

 

Тот пост касался первого алгоритма, второй (в последнем оффтопе) этот косяк учитывает

 

1 2 20 3 4 5 = выдаёт одно вычёркивание

 

Какую именно хитрую последовательность оно не обрабатывает?

Поделиться сообщением


Ссылка на сообщение

да я даже не смотрел твой алгоритм. просто посмотрел, что там переборов нет.

ты переменные называешь как мудак, противно читать :trollface:


Колы я выросту - то хочу буты такым як я

5c8bbc85b99e.gif

 

годные смайлы

Поделиться сообщением


Ссылка на сообщение

currentIndex, Result, last - что с ними не так? :trollface:

 

Там вся суть алгоритма полного перебора в двух строчках для рекурсии - вызов CountNext если текущее число больше предыдущего как с вычеркиванием этого числа, так и без.

Поделиться сообщением


Ссылка на сообщение

скачай решарпер - увидишь.

методы называются не пойми как, локальные. Свойство - вообще пиздец. зачем так делать?

приватные поля с большой буквы, рандом почему-то выделен в статичное поле. из названия методов хуй поймешь, что они делают.

вместо возвращаемых значений почему-то используются какие-то приватные поля


Колы я выросту - то хочу буты такым як я

5c8bbc85b99e.gif

 

годные смайлы

Поделиться сообщением


Ссылка на сообщение

Потому что я делал это просто так и всё что там было - переделывалось 150 раз.

 

Рандом в статике потому что я гонял эту хуйню по десять раз чтобы увидеть одновременно много результатов. Всё считалось так быстро что я получал 10 идентичных массивов.

Свойство - чтоб вытащить текстом эту последовательность и вывести в консоль - вообще похуй на него, он в алгоритме не юзается.

CountK - посчитать "К", это из условия задачи (как и N). CountNext - не придумал как лучше назвать.

Половина полей были то публичными, то приватными, то внутри метода октуда я их вырезал и тупо пастил в класс.

Про возвращаемые значения в чём проблема - Result чтоли? А как я буду хванить то самое минимальное число вычеркиваний?

Поделиться сообщением


Ссылка на сообщение
(изменено)

Как создать массив указателей на функции? Типо вот есть 4 функции, я их хочу вызывать funct[1](arg).Типо массив,но только с функциями

через typedef в гуголе не понятно вот


Изменено пользователем Airfol

Поделиться сообщением


Ссылка на сообщение

#include <stdio.h>

 

int sum(int a, int b);

int subtract(int a, int b);

int mul(int a, int b);

int div(int a, int b);

 

int (*p[4]) (int x, int y);

 

int main(void)

{

int result;

int i, j, op;

 

p[0] = sum; /* address of sum() */

p[1] = subtract; /* address of subtract() */

p[2] = mul; /* address of mul() */

p[3] = div; /* address of div() */

 

printf("Enter two numbers: ");

scanf("%d %d", &i, &j);

 

printf("0: Add, 1: Subtract, 2: Multiply, 3: Divide\n");

do {

printf("Enter number of operation: ");

scanf("%d", &op);

} while(op<0 || op>3);

 

result = (*p[op]) (i, j);

printf("%d", result);

 

return 0;

}

 

int sum(int a, int b)

{

return a + b;

}

 

int subtract(int a, int b)

{

return a - b;

}

 

int mul(int a, int b)

{

return a * b;

}

 

int div(int a, int b)

{

if(b)

return a / b;

else

return 0;

}


Публикация отключена

Поделиться сообщением


Ссылка на сообщение

буду и дальше наезжать не вникая


Колы я выросту - то хочу буты такым як я

5c8bbc85b99e.gif

 

годные смайлы

Поделиться сообщением


Ссылка на сообщение

Лучше вникать не наезжая. Типа там основная рекурсивная функция 10 строк, как же нечитаемо из-за регистра названий методов и переменных, сук пздц...

Поделиться сообщением


Ссылка на сообщение
#include int sum(int a, int b); int subtract(int a, int b); int mul(int a, int b); int div(int a, int b); int (*p[4]) (int x, int y); int main(void) { int result; int i, j, op; p[0] = sum; /* address of sum() */ p[1] = subtract; /* address of subtract() */ p[2] = mul; /* address of mul() */ p[3] = div; /* address of div() */ printf("Enter two numbers: "); scanf("%d %d", &i, &j); printf("0: Add, 1: Subtract, 2: Multiply, 3: Divide\n"); do { printf("Enter number of operation: "); scanf("%d", &op); } while(op<0 || op>3); result = (*p[op]) (i, j); printf("%d", result); return 0; } int sum(int a, int b) { return a + b; } int subtract(int a, int b) { return a - b; } int mul(int a, int b) { return a * b; } int div(int a, int b) { if(b) return a / b; else return 0; }

 

Спасибо, пол дня через typedef пытался :avtorklif:

Поделиться сообщением


Ссылка на сообщение
#include int sum(int a, int b); int subtract(int a, int b); int mul(int a, int b); int div(int a, int b); int (*p[4]) (int x, int y); int main(void) { int result; int i, j, op; p[0] = sum; /* address of sum() */ p[1] = subtract; /* address of subtract() */ p[2] = mul; /* address of mul() */ p[3] = div; /* address of div() */ printf("Enter two numbers: "); scanf("%d %d", &i, &j); printf("0: Add, 1: Subtract, 2: Multiply, 3: Divide\n"); do { printf("Enter number of operation: "); scanf("%d", &op); } while(op<0 || op>3); result = (*p[op]) (i, j); printf("%d", result); return 0; } int sum(int a, int b) { return a + b; } int subtract(int a, int b) { return a - b; } int mul(int a, int b) { return a * b; } int div(int a, int b) { if(b) return a / b; else return 0; }

 

Спасибо, пол дня через typedef пытался :avtorklif:

Хз чего ты там мучалтся, все же просто:

typedef int (*func)(int x, int y) ;
int _tmain(int argc, _TCHAR* argv[])
{
vector<func> myFunctions;
myFunctions.push_back(Csum);
myFunctions.push_back(Csubtract);
myFunctions.push_back(Cmul);
myFunctions.push_back(Cdiv);
for (func f : myFunctions){
 cout << f(42,13) << endl;
}
return 0;
}

 

Ну или даже проще так:

std::vector<std::function<int (int,int) >> myFunctions2;

Поделиться сообщением


Ссылка на сообщение

что за хуйня ебанная не компилится блять ни в какую сука

 

package com.example.fw;
import org.testng.Assert;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.NoAlertPresentException;
import org.openqa.selenium.NoSuchElementException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.Select;
import com.example.tests.ContactData;
import com.example.tests.GroupData;
import com.example.tests.TestBase;
public class ApplicationManager {

public static WebDriver driver;
public static String baseUrl;
public static boolean acceptNextAlert = true;
private static StringBuffer verificationErrors = new StringBuffer();

public ApplicationManager() {
  driver = new FirefoxDriver();
  baseUrl = "http://localhost/";
  driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
}
public void stop() {
  driver.quit();
  String verificationErrorString = verificationErrors.toString();
  if (!"".equals(verificationErrorString)) {
  Assert.fail(verificationErrorString);
  }
}

public void returnToMainPage() {
 driver.findElement(By.linkText("group page")).click();
  }
public void submitNewGroup() {
 driver.findElement(By.name("submit")).click();
  }
public void initNewGroup() {
 driver.findElement(By.name("new")).click();
  }
public void gotoGroupsPages() {
 driver.findElement(By.linkText("groups")).click();
  }
public void submitContactCreation() {
 driver.findElement(By.name("submit")).click();
}
public void initNewContactCreation() {
 driver.findElement(By.linkText("add new")).click();
}
public void openMainPage() {
 driver.get(TestBase.baseUrl + "/addressbookv4.1.4/");
  }
public void fillGroupForm(TestBase testBase, GroupData group) {
   driver.findElement(By.name("group_name")).clear();
   driver.findElement(By.name("group_name")).sendKeys(group.name);
   driver.findElement(By.name("group_header")).clear();
   driver.findElement(By.name("group_header")).sendKeys(group.header);
   driver.findElement(By.name("group_footer")).clear();
   driver.findElement(By.name("group_footer")).sendKeys(group.footer);
  }
public void fillNewContactForm(TestBase testBase, ContactData contact) {
 driver.findElement(By.name("firstname")).clear();
 driver.findElement(By.name("firstname")).sendKeys(contact.contactname);
 driver.findElement(By.name("lastname")).clear();
 driver.findElement(By.name("lastname")).sendKeys(contact.lastname);
 driver.findElement(By.name("address")).clear();
 driver.findElement(By.name("address")).sendKeys(contact.address);
 driver.findElement(By.name("home")).clear();
 driver.findElement(By.name("home")).sendKeys(contact.home);
 driver.findElement(By.name("mobile")).clear();
 driver.findElement(By.name("mobile")).sendKeys(contact.mobile);
 driver.findElement(By.name("work")).clear();
 driver.findElement(By.name("work")).sendKeys(contact.work);
 driver.findElement(By.name("email")).clear();
 driver.findElement(By.name("email")).sendKeys(contact.email);
 driver.findElement(By.name("email2")).clear();
 driver.findElement(By.name("email2")).sendKeys(contact.email2);
 new Select(driver.findElement(By.name("bday"))).selectByVisibleText(contact.bday);
 new Select(driver.findElement(By.name("bmonth"))).selectByVisibleText(contact.bmonth);
 driver.findElement(By.name("byear")).clear();
 driver.findElement(By.name("byear")).sendKeys(contact.byear);
 new Select(driver.findElement(By.name("new_group"))).selectByVisibleText(contact.new_group);
 driver.findElement(By.name("address2")).clear();
 driver.findElement(By.name("address2")).sendKeys(contact.address2);
 driver.findElement(By.name("phone2")).clear();
 driver.findElement(By.name("phone2")).sendKeys(contact.phone2);
}
public boolean isElementPresent(By by) {
 try {
   driver.findElement(by);
   return true;
 } catch (NoSuchElementException e) {
   return false;
 }
  }
public boolean isAlertPresent() {
 try {
   driver.switchTo().alert();
   return true;
 } catch (NoAlertPresentException e) {
   return false;
 }
  }
public String closeAlertAndGetItsText() {
 try {
   Alert alert = driver.switchTo().alert();
   String alertText = alert.getText();
   if (acceptNextAlert) {
	 alert.accept();
   } else {
	 alert.dismiss();
   }
   return alertText;
 } finally {
   acceptNextAlert = true;
 }
  }
}

 

 

эклипса пиздит на driver cannot be resolved or is not a field хотя я блять в самом начале все дрова передал :fffuuu:


:buba:

ни мало ни много, а много и мало

Поделиться сообщением


Ссылка на сообщение

как вариант закрыть\открыть эклипс :trollface:


Торжество разума в том, чтобы уживаться с теми, у кого этого разума нет. Вольтер.
Чтобы хорошо высыпаться, нужно спать 8 часов в день. И еще столько же ночью.

Поделиться сообщением


Ссылка на сообщение
Гость
Эта тема закрыта для публикации сообщений.

×
×
  • Создать...