Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > JavaScript, Ajax
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.06.2015, 19:27   #1
Abimeleh
Пользователь
 
Аватар для Abimeleh
 
Регистрация: 13.07.2012
Сообщений: 57
По умолчанию Сравнение эффективности двух алгоритмов

Доброго времени суток. Суть моего вопроса вот в чем... Есть задача:
Напишите функцию camelize(str), которая преобразует строки вида «my-short-string» в «myShortString».
То есть, дефисы удаляются, а все слова после них получают заглавную букву.
Например:
camelize("background-color") == 'backgroundColor';
camelize("list-style-image") == 'listStyleImage';
camelize("-webkit-transition") == 'WebkitTransition';
Такая функция полезна при работе с CSS.
P.S. Вам пригодятся методы строк charAt, split и toUpperCase.

Собственно говоря задачу то я решил,
Код:
function camelize(phrase) {   //1
 var arr = phrase.split('')
 var i = 0; phrase=""
 //document.write(arr.length)
 for (var i=0; i < arr.length; i++) {   //2    
 if (arr[i] === "-" & i < arr.length-1) {
  arr[i+1]=arr[i+1].toUpperCase()
} 
else if (arr[i] === "-" & i === arr.length-1) {
  arr[i]="";
} 
//else {
//}
 if (arr[i] != "-" ) {phrase=phrase+arr[i]} 
 } //2
 return phrase
}  //1
alert(camelize("--pigs-suddenly-came-out--"))
затем посмотрел их решение в учебнике,
Код:
function camelize(str) {
var arr = str.split('-');
 for (var i = 1; i < arr.length; i++) {
 // преобразовать: первый символ с большой буквы
 arr[i] = arr[i].charAt(0).toUpperCase() + arr[i].slice(1);
                                          //взять все элементы, начиная с номера 1
 }
 return arr.join('');
}
alert(camelize("background-color"))
alert(camelize("list-style-image"))
alert(camelize("-webkit-transition"))
и задался вопросом "насколько мой алгоритм менее эффективен чем их?"
То есть хочется найти формульное выражение типа O(n) или O(n^2) или что нибудь в этом роде. Сам я в этом плохо разбираюсь...Поэтому
большое спасибу тому кто сможет помочь мне разобратся в этой проблеме.
How ugly are feet of those who bring bad news. (comp Romans 10:15)
Abimeleh вне форума Ответить с цитированием
Старый 15.06.2015, 20:21   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
"насколько мой алгоритм менее эффективен чем их?"
Учитывая var arr = phrase.split(''), думаю что КПД твоего ниже.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 15.06.2015, 22:22   #3
Naive
Раздолбайских Дел
Старожил
 
Аватар для Naive
 
Регистрация: 22.05.2009
Сообщений: 3,828
По умолчанию

Оба отстой:
Код:
function camelize( str ){ 
  return str.replace(/-+(\w)/g,function(s,a){ return a.toUpperCase() }) 
}
Alar, верни репу!
Naive вне форума Ответить с цитированием
Старый 15.06.2015, 23:22   #4
Abimeleh
Пользователь
 
Аватар для Abimeleh
 
Регистрация: 13.07.2012
Сообщений: 57
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Учитывая var arr = phrase.split(''), думаю что КПД твоего ниже.
Да я понимаю что моего ниже, а вот как подсчитать на сколько ниже ?

Цитата:
Сообщение от Naive Посмотреть сообщение
Оба отстой:
Код:
function camelize( str ){ 
  return str.replace(/-+(\w)/g,function(s,a){ return a.toUpperCase() }) 
}
Сначала хотел выразить восхищение такой лаконичностью (ибо мои знания js на данный момент не позволяют его полностью понять) однако он не со всеми строками выдает корректный результат вот в частности
alert(camelize("--pigs-suddenly-came-out--"))
alert(camelize("-холера-раз-два-три--"))
How ugly are feet of those who bring bad news. (comp Romans 10:15)

Последний раз редактировалось Stilet; 16.06.2015 в 09:22.
Abimeleh вне форума Ответить с цитированием
Старый 16.06.2015, 00:20   #5
Fenex
Форумчанин
 
Аватар для Fenex
 
Регистрация: 15.02.2012
Сообщений: 821
По умолчанию

Тогда так:
Код:
function camelize( str ){ 
  return str.replace(/-+([A-zА-яёЁ]?)/g, function(s,a){ return a.toUpperCase() }) 
}
Цитата:
Да я понимаю что моего ниже, а вот как подсчитать на сколько ниже ?
Проще наверное тесты погонять. Сделать в цикле большое количество расчётов, и подсчитывать потребовавшееся время.
Но обращать такое серьёзное внимание на алгоритмы написанные на JS - немного странно =)
В таких языках как JS борятся не за быстроту алгоритма, а за чистоту и понятность кода (если конечно место не узкое и требовательное).
^-.-^ My GitHub

Последний раз редактировалось Stilet; 16.06.2015 в 09:22.
Fenex вне форума Ответить с цитированием
Старый 16.06.2015, 01:29   #6
nerv
Форумчанин
 
Аватар для nerv
 
Регистрация: 26.04.2010
Сообщений: 450
По умолчанию

Цитата:
Сообщение от Naive Посмотреть сообщение
Оба отстой:
Код:
function camelize( str ){ 
  return str.replace(/-+(\w)/g,function(s,a){ return a.toUpperCase() }) 
}
отстой

Код:
function camelize(str) { 
    return str.replace(/-+(\w)/g, (s, a) => a.toUpperCase());
}
Тишина – самый громкий звук
nerv вне форума Ответить с цитированием
Старый 16.06.2015, 04:05   #7
Fenex
Форумчанин
 
Аватар для Fenex
 
Регистрация: 15.02.2012
Сообщений: 821
По умолчанию

кыш говорю
^-.-^ My GitHub
Fenex вне форума Ответить с цитированием
Старый 16.06.2015, 11:51   #8
Abimeleh
Пользователь
 
Аватар для Abimeleh
 
Регистрация: 13.07.2012
Сообщений: 57
По умолчанию

Ну шо ж, спасибо за ответы...
How ugly are feet of those who bring bad news. (comp Romans 10:15)
Abimeleh вне форума Ответить с цитированием
Старый 16.06.2015, 12:56   #9
nerv
Форумчанин
 
Аватар для nerv
 
Регистрация: 26.04.2010
Сообщений: 450
По умолчанию

Цитата:
Сообщение от Fenex Посмотреть сообщение
кыш говорю
обоснуй __
Тишина – самый громкий звук
nerv вне форума Ответить с цитированием
Старый 17.06.2015, 12:47   #10
Naive
Раздолбайских Дел
Старожил
 
Аватар для Naive
 
Регистрация: 22.05.2009
Сообщений: 3,828
По умолчанию

Цитата:
Сообщение от nerv Посмотреть сообщение
обоснуй __
Ты в отдельной теме напиши инструкцию как запускать экма6 и прикладывай ссылочку
Alar, верни репу!
Naive вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сравнение двух листов. егоровна Microsoft Office Excel 12 14.04.2012 17:35
Сравнение двух массивов Рик Общие вопросы Delphi 3 07.04.2011 15:53
Сравнение алгоритмов сортировки массива Семен_Владимирович Общие вопросы C/C++ 2 15.02.2011 19:02
сравнение двух таблиц Iskin Microsoft Office Excel 3 08.12.2010 07:18
Сравнение быстродействия алгоритмов Pti44ka Помощь студентам 9 13.11.2009 13:41