2017-01-17 2 views
2

Я читал книгу языков программирования Go (Донован и Керниган) и их пример echo1, они сказали: «Это квадратичный процесс, который может быть дорогостоящим, если количество аргументов велико, но для эха это маловероятно ". Что означает квадратичный процесс ?, и как это дорого, если количество аргументов велико?Что такое квадратичный процесс?

Спасибо.

+1

https://www.google.com/search?q=define+quadratic&ie=utf-8&oe=utf-8 –

+0

@ KenWhite, я почти уверен, что такое квадратичное средство. Но в этом примере и в программировании вообще, что означает квадратичный процесс? И как это влияет на производительность? Если у вас есть ссылка на это, я был бы признателен. Благодаря! – Omar

ответ

3

Вообще говоря, квадратичный означает что-то, что относится к квадрату чисел. В этом контексте это означает, что стоимость процесса пропорциональна квадрату входного размера. Это связано с тем, что строки объединены с помощью оператора +=, который является дорогостоящим в Go, поскольку строки неизменяемы, и каждая новая строка должна создаваться в памяти каждый раз, когда вы объединяетесь. Более эффективные способы для конкатенации строк включают запись в bytes.Buffer и преобразования его в строку, или с помощью функции strings.Join

+0

Спасибо @jussius. Теперь я понимаю! И это именно то, что обсуждается позже в книге. И стоимость здесь - это память, я предполагаю? – Omar

+0

Более или менее. Допустим, вы добавляли «Hello» и «World», используя 's =« Hello »+« World ». Вы должны создать новый массив рун 10 рун в длину, а затем скопировать «Привет» в первую половину, а «Мир» - во второй. Довольно легко. – Kaedys

+2

Однако, если вы разложите это на конкатенирование «H», «e», «l», «l», «o», «W», «o», «r», «l» и «d», , и вы все еще использовали оператор '+' (или '+ ='), теперь у нас есть проблема. Вы начинаете с «H» + «e» ', создаете новый массив длиной 2, копируете в« H »и« e ». Теперь у вас есть «Он» + «l». Новый массив длиной 3, скопируйте в «He», а затем «l». Повторяйте, пока не выйдете из строчек. Каждый раз вы создаете новый массив, потому что строки неизменяемы, поэтому конкатенация должна создавать новую строку и, следовательно, новый базовый массив. Это означает LOT распределения и копирования, особенно для более ранних строк. – Kaedys

Смежные вопросы